您将不得不自己获取信息 - WCF服务本身不知道它是否将托管在IIS中或是自托管的。毕竟,这只是一个ServiceHost
实例正在某种程度上旋转起来。
所以我想你必须有一些设置,可以放进任何web.config
或app.config
- 是这样的:
<add key="WCFHost" value="IIS" />
或
<add key="WCFHost" value="CustomApp" />
,然后评估该值,并根据在你回来的时候,打开WebConfigurationManager或者只是打开ConfigurationManager。
你可能会认为你可以检查HttpContext
的存在:如果它是NULL,那么你运行在一个自定义应用程序中,如果它不是NULL,那么这是web场景。但这是行不通的,因为你可以在IIS中托管一个WCF服务(因此你有一个web.config
咨询),但没有ASP.NET兼容性设置,在这种情况下,HttpContext
将为NULL 即使你在虚拟主机场景中运行。
一种选择是,以检查此设置在这里:
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
这将包含完整路径添加到当前的AppDomain的配置文件 - 如果它是一个web应用程序,这将包含在最终的路径+ web.config
。
所以,如果你检查
if(Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) == "web.config")
,你可以确信你在一个web应用程序,你有一个web.config
来看待。