2010-07-06 56 views
3

如何在使用服務時啓動WCF客戶端僅在net.msmq上可用
- 當您使用「添加服務引用」時,會出現錯誤。 ..如何在使用net.msmq時添加WCF服務參考

MetadataExchangeClient實例無法初始化,因爲沒有綁定可用於方案'net.msmq'。你可以在構造函數中提供一個Binding,或者指定一個configurationName。 參數名稱:方​​案 如果在當前解決方案中定義了服務,請嘗試構建解決方案並再次添加服務參考。

舉例來說,我已經得到了在BizTalk例如,從MSDN WcfNetAdapterPublishing運行起來,它包括在使用服務控制檯測試客戶端...

net.msmq://localhost/private/WcfNetMsmqAdapterPublishing 

所以現在看來​​,這是可能的,但我無法看到開始?

回答

2

您可以在單獨的端點上公開與basicHttpBinding相同的服務和數據合同,使用該端點(及其Metadata Exchange)創建服務引用,然後手動調整您的app.config以使用netMsmqBinding

或者您可以與服務器和客戶端項目之間的服務和數據合同共享合同程序集,並手動創建配置(實際上不是什麼大問題),然後使用ChannelFactory<T>在代碼中創建客戶端代理。由於您已經在使用netMsmqBinding,所以您肯定在電線的兩端都使用了.NET - 所以這項技術應該可以正常工作。

+0

感謝您的指針Marc – SteveC 2010-07-06 17:19:21

1

您需要添加一個基地址(除了net.msmq之外),其前綴爲http。所以,在你給的例子net.msmq,你想補充一點:

http://localhost/private/WcfNetMsmqAdapterPublishing ... 

然後,您需要添加一個端點mex像這樣:

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 

然後啓動服務(外Visual Studio中)...然後添加引用您添加的http://終點......

這裏是我的一個示例:

<service name="Services.Archiver" behaviorConfiguration="FacebookArchiver"> 
     <endpoint address="" 
       binding="netMsmqBinding" 
       bindingConfiguration="msmq" 
       contract="Services.IArchiver" 
       behaviorConfiguration="validator" /> 
     <endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="net.msmq://localhost/private/Archiver" /> 
      <add baseAddress="http://localhost/private/Archiver" /> 
     </baseAddresses> 
     </host> 
    </service> 

在此示例中,您只需將服務引用添加到http://localhost/private/Archiver ... done。

+0

感謝您的回覆 – SteveC 2012-05-04 08:25:20