В С#, как я могу получить имя вызывающего проекта из указанного проекта?

111
18

У меня есть три проекта: My.Business, My.WebSite и My.WebService

Мне нужен мой класс ведения журнала, чтобы иметь возможность идентифицировать, когда запрос сделан с веб-сайта по сравнению с веб-службой. Раньше я использовал веб-службу как отдельное приложение под веб-сайтом, поэтому я просто использовал разные конфигурационные файлы, которые отлично работали. Но я хочу, чтобы веб-служба теперь запускалась под одним и тем же приложением.

Если бы я мог выяснить, поступал ли запрос от My.WebSite или My.WebService, я бы установил его, но я не уверен, как это сделать.

    Assembly.GetExecutingAssembly() возвращается назад My.Business Assembly.GetEntryAssembly() имеет значение null Я мог бы проверить StackTrace, но это кажется неряшливым, и как мне вернуться назад? Тем более, что ведение журнала может быть вызвано кодом в My.Business, который изначально был вызван из одного из других проектов.

Поскольку запросы веб-службы заканчиваются на ".asmx", работает следующая концепция, но это просто не так.

return HttpContext.Current.Request.Path.IndexOf(".asmx") >= 0 ? "My.WebService" : "My.WebSite";

Благодарю!

спросил(а) 2021-01-19T14:24:13+03:00 6 месяцев, 1 неделя назад
1
Решение
63

Вы должны иметь возможность использовать Assembly.GetCallingAssembly():

return Assembly.GetCallingAssembly().FullName;

Это вернет сборку, которая вызвала текущий исполняемый метод, чтобы вы могли захватить того, кто звонит в вашу сборку My.Business таким образом.

С учетом сказанного я склонен согласиться с вышеизложенным замечанием Мейриона Хьюза. Вам может потребоваться передать любую информацию, которая требуется вашему классу ведения журнала, особенно если в будущем он будет использоваться в других приложениях.

ответил(а) 2021-01-19T14:24:13+03:00 6 месяцев, 1 неделя назад
45

this.GetType().Assembly.FullName даст имя имени сборки для текущего класса.

ответил(а) 2021-01-19T14:24:13+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема