【发布时间】:2012-03-21 09:03:57
【问题描述】:
我什至不确定这是否可行,但我希望能找到线索来确定当前正在执行的代码是否在 IIS Express 下运行。到目前为止我最好的近似值,这是非常骇人听闻的,并且肯定会在某些时候失败/破坏:
bool IsExpress =
Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5"
&& Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000;
当然必须有更好的方法。我对 Application、Server 和 Request 对象的检查似乎没有发现任何可以提供更好洞察力的东西。也许我只需要看看其他对象?
更新:
我真的很好奇是否有办法检测到这一点 - 在这一点上它真的很学术,我没有迫切需要使用它。原来的问题是成立的。但本着回应 cmets 的精神,特别是我有兴趣回答来自本网站上另一个问题/答案的批评:How to search the server's MIME map。批评是发布的答案不适用于 IIS Express,仅适用于传统的 IIS 实例。 IIS Express 将 MIME 配置存储在 applicationhost.config XML 文件中,我想更新该答案以提供一种方法来为 IIS Express 返回该信息。我当然可以添加一些从 XML 中获取适当值的代码(是的,LINQ to XML!),但我真的想让它更智能。需要明确的是,我不需要帮助解析该文件 - 只是在尝试检测代码当前是否在 IIS Express 引擎中执行时更优雅。
更新 2:
IIS 8.0 Express Beta 是released this week,它进一步表明我的问题中的方法很脆弱并且会崩溃。虽然针对特定版本不会破坏交易,但最好考虑到这一点并尝试确保代码至少可以与今天的已知版本一起使用。
【问题讨论】:
-
你的目标是什么?为什么要检测到这一点(也许还有其他方法可以实现您的目标)?
-
如果它在 IIS Express 中运行,你想以不同的方式处理什么?也许这是您需要问的问题,而不是如何检测 IIS Express。 “在调试中运行时,我如何使用 _____ 而不是 _____?”,例如。
-
希望集中在检查一些配置元素 - 使用 DirectoryEntry("IIS:/localhost/W3SVC/") 与解析控制 IIS Express 的 applicationhost.config 中的 XML。
-
再一次,你的目标到底是什么?为什么应用程序应该知道托管环境?
标签: c# iis iis-express