2010-01-06 112 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