2010-04-14 116 views
0

我要检查端点是否在配置中定义之前,我会尽力去创造如何获得配置WCF服务

System.ServiceModel.ClientBase<T> sourceClient = new System.ServiceModel.ClientBase<T>(EndpointName, new EndpointAddress(discoveryUri)); 

要检查它,我需要得到一个配置,但我怎么能定义是否需要使用WebConfigurationManagerConfigurationManager。有什么方法可以定义WCF服务的托管位置吗?

回答

2

您将不得不自己获取信息 - WCF服务本身不知道它是否将托管在IIS中或是自托管的。毕竟,这只是一个ServiceHost实例正在某种程度上旋转起来。

所以我想你必须有一些设置,可以放进任何web.configapp.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来看待。