我無法將服務添加到實現兩個合同的app.config,因此需要兩個端點。從具有兩個合同和端點的服務創建代理
見這個問題對於我試圖做一個簡單的例子:
WCF config for a service class implementing multiple contracts on separate endpoints
我真的想用在我的客戶服務參考,以創建和維護的代理我,但是當我嘗試用兩個端點與服務做到這一點,我得到的信息出現以下錯誤時它會嘗試下載元數據:
元數據包含無法解析
參考
這裏是我如何在我的app.config服務建立在我的WCF服務庫的例子:
<service name="MyService">
<endpoint address="Address1" binding="wsDualHttpBinding" bindingConfiguration=""
name="Service1" contract="IService1" />
<endpoint address="Address2" binding="wsDualHttpBinding" bindingConfiguration=""
name="Service2" contract="IService2" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="mex" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyService/" />
</baseAddresses>
</host>
</service>
我覺得我失去了一些東西簡單。當我刪除其中一個端點時,一切正常。但是如果我有兩個端點,它不能解析元數據。
我試圖去除基地址,並使用詳細地址,並用不同的端口,但我已經嘗試導致同樣的錯誤的所有路徑。
編輯: 我要澄清爲什麼我試圖做到這一點首先,我猜。我有一個單一的服務,我希望客戶能夠連接到。但有一些方法我不希望客戶有權訪問。我認爲將管理方法和客戶端方法分成兩個單獨的合同是一個好的開始。
更加清楚的是,這是一款遊戲服務器。我希望能夠啓動遊戲服務器的新實例並將其發送給地圖等。 我不希望玩家有權訪問LoadMap()或類似的東西。 我真的很想將遊戲客戶端的方法和回調與製作服務或服務器管理員的方法和回調分開。
我也想他們是單獨的合同只是爲了更容易閱讀和維護。
但是,如果有更好的方法來做到這一點,我很樂意提供建議。
IService2是否存在?你爲了使它工作而刪除了哪一個? – meanbunny
是的,兩者都存在,我可以從WCF服務庫的app.config中刪除任一端點,並且客戶端中的服務引用會找到我沒有刪除的端點。我通過創建一個默認的WCF服務庫再次嘗試了它。然後我添加了一個帶有ServiceContract屬性的接口,並在我的服務中實現了該接口,並設置了與我發佈的類似的WCF配置。我使用默認的wsHttpBinding,並在我的測試客戶端試圖解析服務引用時得到相同的結果。 – Mike