Как код.NET может знать, работает ли он в рамках приложения веб-сервера?

Я сделал, чтобы библиотека кодировала, который должен знать, выполняется ли она в контексте веб-сервера или автономного сервера приложений.

Очевидное это приходит на ум, должно проверить название файла конфигурации приложения и если это - web.config - затем это - веб-сервер, иначе - автономный сервер приложений.

Иначе должен искать что-то как "Временные файлы ASP.NET" в пути теневой папки.

Но мне не нравятся оба из них, так как они кажутся также hacky и хрупкий. Существует ли устойчивый способ сделать то, что я хочу?

Спасибо.

P.S.

Можно определить специализированную установку конфигурации приложения - IsWebServer, но мне не нравится он еще больше.

Править:

При поиске решения другой проблемы я думаю, что решил этого - детали здесь

8
задан Community 23 May 2017 в 11:56
поделиться

6 ответов

пытается решить другую Проблема, я нашел хорошее решение для этого. Существует личный метод System.configuration.settingsPropertyvalue.ishostedinaspnet , который имеет именно то, что мне нужно. Будучи частным методом, я не хочу называть это (хотя я мог бы использовать отражение), но его реализация тривиальна:

private bool IsHostedInAspnet()
{
    return (AppDomain.CurrentDomain.GetData(".appDomain") != null);
}

(в соответствии с отражателем)

выглядит как специальный ключ в данных домена приложений - «.Appdomain», который устанавливается при запуске в веб-сервере ASP.NET.

Я буду придерживаться этого.

9
ответ дан 5 December 2019 в 06:37
поделиться

Лучший вариант - это настройка конфигурации.

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

Это вариант, на которую я бы пошел.

6
ответ дан 5 December 2019 в 06:37
поделиться

Можно проверить

HttpContext.Current

Если он не нулевой, то он запускается из веб-приложения.

See HttpContext.Current Property

7
ответ дан 5 December 2019 в 06:37
поделиться

Вы можете узнать текущее имя процесса:

Process p = Process.GetCurrentProcess();
string assemblyName = p.ProcessName;

и затем проверить, является ли это имя процесса ASP.NET

2
ответ дан 5 December 2019 в 06:37
поделиться
  • браузерноферпер .. ::. Isbrowserhosted Свойство

получает значение, которое указывает, является ли текущая презентация Windows Приложение Foundation (WPF) Хостер браузера.

Это как его сделано в XBAP

Или если у вас есть appdomain, размышляя и получите что-нибудь от этого? Использование

1
ответ дан 5 December 2019 в 06:37
поделиться

Я думаю, что самое лучшее, что нужно сделать, это разбить библиотеку на 2 DLL, которые по-настоящему общему и один ( Тот, который требует ASP.NET), который загружается только на сайте. Проверка, если он в настоящее время работает в ASP.NET, чувствует себя немного взлома.

Очень зависит от ситуации, или нет, вы можете легко сделать это.

0
ответ дан 5 December 2019 в 06:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: