Могу ли я использовать "HostingEnvironment", чтобы определить, является ли это веб или Win - PullRequest
4 голосов
/ 26 марта 2012

В моей библиотеке я использую HostingEnvironment.MapPath для своего веб-приложения.Но мне нужно вызывать одну и ту же функцию из форм Windows и службы Windows.

В приложении Windows HostingEnvironment.ApplicationID имеет значение null, в веб-приложении HostingEnvironment.ApplicationID выглядит примерно так: «99xxx999».

Могу ли я использовать «HostingEnvironment», чтобы определить, является ли это веб или Win?

Безопасно ли это использовать?

if (HostingEnvironment.ApplicationID == null)
{
    //called from windows application
}
else
{
    //called from web application
}

Ответы [ 2 ]

11 голосов
/ 26 марта 2012

Более стандартный способ сделать это - использовать метод HttpContext.Current:

if (HttpContext.Current == null)
{
    // called from windows application
}
else
{
    // called from web application
}

Конечно, использование материала, связанного с HttpContext, в не связанных с HTTP слоях вашего приложения - это запах дизайна.Он не только пахнет => воняет.

Более стандартным способом является передача кода в качестве аргумента непосредственно имени файла в качестве аргумента.При вызове из веб-приложения вы передаете Server.MapPath("~/foo.txt"), а при вызове из приложения Windows - напрямую передаете имя файла относительно текущего исполняемого файла.

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

3 голосов
/ 26 марта 2012

Прочитайте документацию MSDN здесь: http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.applicationid(v=vs.100).aspx

В нем говорится:

"Приложение должно быть запущено с установленным AspNetHostingPermissionLevel с высоким уровнем доверия для доступа к свойству ApplicationId "

Надеюсь, вы получили ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...