2010-01-06 253 views
5

我将一个WCF客户端连接到一组服务,所有这些服务都实现了同一个合同,并且都在同一个主机上。我希望能有一种方法来结合端点定义来减少配置混乱。我也宁愿不以编程的方式进行 - 只是通过配置。现在,我的配置已经这样重复多次:WCF客户端配置 - 基地址?

<endpoint address="http://hostname/ServiceA.svc" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" 
     contract="ServiceReference.ISearchService" name="ServiceA"> 
</endpoint> 

<endpoint address="http://hostname/ServiceB.svc" 
     binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_MyBinding" 
     contract="ServiceReference.ISearchService" name="ServiceB"> 
</endpoint> 

// continued for ServiceC, ServiceD, etc 

对于服务器的配置,有一些notion of "baseAddressPrefixFilters",可用于这一目的 - 有什么对客户端的配置?

回答

3

在WCF中有一个基地址的概念 - 不幸的是,它只适用于你自己托管,例如,在控制台应用程序或NT服务中托管您的服务。但是,这只适用于服务器端 - 客户端没有任何相似之处。在客户端,您始终必须定义端点应连接到的完整的全服务地址。

如果您在IIS中托管,您的服务地址由服务器名称,虚拟目录(以及可能的子目录)和用于在IIS中托管服务的* .svc文件的名称确定。这是一个固定的系统惯例,你不能影响它,不幸的是(.NET 4会带来一些补救措施)。

+2

有关如何使用.Net 4做到这一点的任何新闻?我正在努力寻找解决方案。 – flayn 2011-12-09 16:18:14

+0

@flo:参见[WCF 4的开发人员简介](http://msdn.microsoft.com/zh-cn/library/ee354381.aspx),并搜索“无文件激活”(无需物理服务激活* .svc文件)和“集成WCF与ASP.NET路由”,它允许你使用路由(如在ASP.NET MVC中)来定义你的服务激活(给你“很好的”URL,没有* .svc扩展名) - 但是这个第二个功能似乎只适用于基于REST的服务:-( – 2011-12-09 16:31:44