我想在尝试创建端点之前检查端点是否已在配置中定义
System.ServiceModel.ClientBase<T> sourceClient = new System.ServiceModel.ClientBase<T>(EndpointName, new EndpointAddress(discoveryUri));
要检查它,我需要获取配置,但如何定义是否需要使用WebConfigurationManager
或ConfigurationManager
。有没有办法定义托管WCF服务的位置?
答案 0 :(得分:2)
您必须自己获取信息 - 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 即使您正在Web托管方案中运行。
一种选择是在此处检查此设置:
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
这将包含当前AppDomain配置文件的完整路径 - 如果它是一个Web应用程序,最后将包含路径+ web.config
。
所以,如果你检查
if(Path.GetFileName(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile) == "web.config")
您可以非常确定自己是在网络应用中,并且需要web.config
来查看。