WCF客户端配置 - 基础地址是什么?

5
我正在将一个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

对于服务器配置,有一些“baseAddressPrefixFilters”的概念可用于此目的 - 是否有任何客户端配置的方法?

1个回答

3
在WCF中有一个基础地址的概念,但很不幸,这只适用于自托管,例如在控制台应用程序或NT服务中托管服务。然而,这仅适用于服务器端-客户端没有类似的功能。在客户端,您必须始终定义完整的服务地址,以便您的终结点可以连接到它。
如果您在IIS中托管,则您的服务地址由服务器名称、虚拟目录(可能是该目录下的子目录)和用于在IIS中托管服务的*.svc文件的名称确定。这是一个固定的系统约定,您无法影响它(不幸的是,.NET 4将为此带来一些改善)。

2
现在有关于如何使用 .Net 4 实现这个的任何消息吗?我正在苦苦寻找解决方案。 - flayn
@flo:请查看A Developer's Introduction to WCF 4,并搜索“file-less activation”(无需物理*.svc文件的服务激活)和“Integrating WCF with ASP.NET Routes”,它允许您使用路由(就像在ASP.NET MVC中一样)来定义您的服务激活(为您提供没有*.svc扩展名的“漂亮”URL),但是这第二个功能似乎仅适用于基于REST的服务 :-( - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接