引用不带mex绑定的WCF服务

引用不带mex绑定的WCF服务,wcf,mex-bindings,Wcf,Mex Bindings,我想知道Visual Studio中的客户端项目如何引用没有mex绑定的WCF服务。每当我删除任何示例WCF服务中的默认mex绑定时,客户端应用程序都找不到该服务,并且在自动生成的注释中,建议在生产环境中删除mex绑定。那么客户端应用程序应该如何找到服务并引用它呢?mex端点是WCF SOAP服务的必要部分。它使客户机工具包能够下拉WSDL并自动生成代理类。正如您所指出的,没有它,客户端就无法获取信息来使用服务。如果您希望客户端能够使用并找到您的服务,则应在您的服务投入生产时使其可用。如果您可以

我想知道Visual Studio中的客户端项目如何引用没有mex绑定的WCF服务。每当我删除任何示例WCF服务中的默认mex绑定时,客户端应用程序都找不到该服务,并且在自动生成的注释中,建议在生产环境中删除mex绑定。那么客户端应用程序应该如何找到服务并引用它呢?

mex端点是WCF SOAP服务的必要部分。它使客户机工具包能够下拉WSDL并自动生成代理类。正如您所指出的,没有它,客户端就无法获取信息来使用服务。如果您希望客户端能够使用并找到您的服务,则应在您的服务投入生产时使其可用。

如果您可以访问包含定义服务契约、操作和数据契约的类型的程序集,则您可以使用
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);
//动态创建服务代理
var工厂=新的ChannelFactory(“NameOfCyclientEndpointInconFigfile”);
var proxy=factory.CreateChannel();
//创建数据契约
var requestDataContract=新的MyDataContract();
//呼叫服务操作。
var responseDataContract=proxy.myservicecooperation(requestDataContract);

如果您有权访问服务端配置文件,那么它也会有所帮助,这样您就可以将端点详细信息复制到客户端配置中。

谢谢。您提到了WCFSOAP服务,这在我脑海中引发了另一个问题。WCF是否提供SOAP以外的服务类型?你说的SOAP服务到底是什么意思?Wcf支持SOAP和RESTful服务。Soap服务提供了大量基于ws-*协议的功能(事务、安全等)。但它们往往更复杂,通常需要一个客户端工具包来使用。Restful服务的开箱即用功能较少,但更轻量级,更易于使用。选择使用哪种应用程序实际上取决于您的应用程序这并不是全部内容-您可以拥有一个WCF客户端,而无需自动生成客户端代理。相反,您引用服务合同的程序集,并使用ChannelFactory为您提供一个代理。当您调用代理时,您的调用将使用客户端配置文件中的传输和绑定等。参考@hugh的答案。虽然这是公认的答案,但应该注意的是,服务引用几乎总是比直接调用服务差的解决方案。你应该考虑使用一个时间是如果满足以下两个条件之一:1。您没有访问服务二进制文件的权限。显然,您必须能够使用用于定义服务的实际类型。或者,2.服务二进制文件是可用的,但会被编译成一个“uber程序集”,其中包含各种你不关心、也不一定想从你的客户端应用程序中使用的东西。