WCF mex不包含来自主机的完整绑定信息

WCF mex不包含来自主机的完整绑定信息,wcf,binding,mex,Wcf,Binding,Mex,我正在发布一个带有MEX端点的元数据交换服务,我正在使用下面的代码来发现它并获取元数据信息 DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint()); FindCriteria findCriteria = FindCriteria.CreateMetadataExchangeEndpointCriteria(ContractType); findCriteria.Duration

我正在发布一个带有MEX端点的元数据交换服务,我正在使用下面的代码来发现它并获取元数据信息

DiscoveryClient discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
FindCriteria findCriteria =      FindCriteria.CreateMetadataExchangeEndpointCriteria(ContractType);
findCriteria.Duration = TimeSpan.FromSeconds(15);
findCriteria.MaxResults = 1;// MaxResults;

FindResponse result = discoveryClient.Find(findCriteria);
discoveryClient.Close();

ServiceEndpointCollection eps = MetadataResolver.Resolve(ContractType, result.Endpoints[0].Address);
return eps[0].Binding;
当我在客户端中获取元数据信息时,绑定信息(
OpenTimeout
ReceiveTimeout
SendTimeout
)返回其默认值

以下是主机中的绑定信息

<binding name="MyServiceBinding" closeTimeout="00:05:00" openTimeout="00:05:00"
      receiveTimeout="23:50:00" sendTimeout="00:05:00" maxReceivedMessageSize="50000000">
   <readerQuotas maxStringContentLength="50000000" maxArrayLength="50000000" />
   <reliableSession ordered="true" inactivityTimeout="00:01:00" enabled="false" />
   <security mode="None" />
</binding>

这是我发现的另一个与我的问题几乎相同的问题

我想知道我是否做错了什么,或者我是否误解了元数据交换的概念


我想做的是将所有必要的信息发送给我的客户,这样他们就可以自动配置自己,而不需要任何硬代码配置。

我不认为你做错了什么-你只是对元数据交换的期望太高了

MEX的目的是能够以编程方式发现新服务,并为这些服务创建客户端代理。为此,有一个WSDL—基本上,WSDL中包含的任何内容都是元数据交换的一部分:

  • 服务合同/服务方法
  • 这些服务方法所需的参数
  • 使用的数据类型的XML架构中的数据类型声明
  • 其他与服务相关的信息,如使用的绑定等

但是MEX不包含所有WCF特定的配置设置,这是您发现的。MEX将创建一个运行正常的客户端代理,但它从未打算将所有配置设置从服务器传输到客户端。您需要在客户端亲自编写此代码

那么我应该改用WSDL吗?@Jose Manuel Ojeda:不,那没什么区别;MEX和WSDL几乎是一样的。没有任何方法可以通过MEX或WSDL自动交换超时之类的配置信息。我只是在尝试修改MaxMessageLength时遇到了这个问题。如果您不能发布完整的绑定信息,这将使整个mex发布变得毫无用处,因为您仍然需要在客户端拥有一些配置信息。。。