2012-01-15 48 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); 

如果你有机会到服务端配置文件,这样你就可以离开这里的端点详细信息复制到您的客户端配置它也有帮助。