.NET代码如何知道它是否在Web服务器应用程序中运行?

mar*_*ark 8 .net asp.net

我有一个库代码,应该知道它是在Web服务器或独立应用程序服务器的上下文中执行的.

想到的显而易见的是检查应用程序配置文件的名称,如果它是web.config - 那么这是一个Web服务器,否则 - 独立的应用程序服务器.

另一种方法是在shadow文件夹的路径中查找类似"Temporary ASP.NET files"的内容.

但我不喜欢这两个,因为它们看起来太脆弱和脆弱.有没有一种强有力的方法来做我想要的?

谢谢.

PS

可以定义一个专用的应用程序配置设置--IsWebServer,但我更不喜欢它.

编辑:

在寻找另一个问题的解决方案时,我想我解决了这个问题 - 细节就在这里

mar*_*ark 9

为了解决另一个问题,我找到了一个很好的解决方案.有一种私有方法System.Configuration.SettingsPropertyValue.IsHostedInAspnet,它完全符合我的需要.作为一个私有方法,我不想调用它(虽然我可以使用反射),但它的实现是微不足道的:

private bool IsHostedInAspnet()
{
    return (AppDomain.CurrentDomain.GetData(".appDomain") != null);
}
Run Code Online (Sandbox Code Playgroud)

(根据反射器)

看起来应用程序域数据中有一个特殊键 - ".appDomain",它是在ASP.NET Web服务器中运行时设置的.

我会坚持这一点.


rah*_*hul 7

你可以检查一下

HttpContext.Current
Run Code Online (Sandbox Code Playgroud)

如果它不为null,则从Web应用程序运行.

请参阅HttpContext.Current属性

  • 只有当它在与请求相同的线程中运行时才会起作用 - 随后生成的后台线程将没有HttpContext. (9认同)

Noo*_*ilk 6

最好的选择是配置设置.

它对可测试性更好; 它更好,因为它是代码如何工作的明显陈述,而且它更好,因为它不依赖于实现细节; 你专门从你设置的值分支.您可能正在做出的决定是不明显的,而您的变量/配置可能暗示了推理.

这是我想要的选择.