2012-01-15 57 views
4

我在想如何在Visual Studio中的客戶端項目可以引用沒有mex綁定的WCF服務。每當我刪除任何示例WCF服務中的默認mex綁定時,客戶端應用程序都找不到該服務,並且在自動生成的註釋中,建議在生產環境中,應該刪除mex綁定。那麼客戶端應用程序應該如何找到該服務並引用它?引用沒有mex綁定的WCF服務

回答

0

mex端點是WCF SOAP服務的必要組成部分。它使客戶端工具包能夠拉下WSDL並自動生成代理類。正如你所指出的,沒有它,客戶無法獲取信息來使用服務。如果您希望客戶能夠使用並找到您的服務,則應在服務生產時將其保留。

+0

謝謝喬。您提到了WCF SOAP服務,並且在我的腦海裏出現了另一個問題。 WCF是否提供SOAP以外的服務類型?當你說一個SOAP服務時,它意味着什麼? – user1137993 2012-01-15 04:48:33

+0

Wcf支持SOAP和RESTful服務。肥皂服務提供了大量基於ws- *協議的功能(交易,安全等)。但它們往往更加複雜,通常需要客戶端工具包才能使用。 Restful服務開箱即用的功能更少,但更輕巧,更易於使用。使用哪個選項確實取決於您的應用程序 – 2012-01-15 05:02:27

+2

這不是完整的故事 - 您可以擁有一個WCF客戶端,而無需自動生成客戶端代理。相反,您需要引用服務合約的彙編,並使用ChannelFactory爲您提供代理。當您撥打代理時,您的呼叫將使用客戶端配置文件中的傳輸和綁定等。請參閱@休的回答。 – saille 2014-01-16 21:04:16

10

如果您有權訪問包含定義服務合同,操作和數據合同類型的程序集,那麼您可以使用ChannelFactory即時創建代理。在這種情況下,您不需要檢索任何服務元數據,因爲您已經可以訪問調用該服務所需的所有信息。

例如

// Create service proxy on the fly 
var factory = new ChannelFactory<IMyServiceContract>("NameOfMyClientEndpointInConfigFile"); 
var proxy = factory.CreateChannel(); 

// Create data contract 
var requestDataContract = new MyDataContract(); 

// Call service operation. 
var responseDataContract = proxy.MyServiceOperation(requestDataContract); 

如果你有機會到服務端配置文件,這樣你就可以離開這裏的端點詳細信息複製到您的客戶端配置它也有幫助。