2011-05-12 71 views
2

我发布一个MEX端点元数据交换服务,我用下面的代码来发现它,并获得元数据信息WCF 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, ReceiveTimeoutSendTimeout)已恢复为其默认值。

这里是主机

<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> 

这里的绑定信息是另外一个问题我已经找到了,这几乎是我的一样。

WCF Service Binding taking default values instead of custom values

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

我想要做的是发送所有必要的信息给我的客户,以便他们可以自动配置他们自己,没有任何硬代码配置。

回答

4

我不认为你做错了任何事 - 你只是期望元数据交换过多。

MEX的目的是能够以编程方式发现新服务,并为这些服务创建客户端代理。对于这一点,还有的WSDL - 基本上包含在WSDL什么是元数据交换的一部分:

  • 服务合同/服务方法
  • 参数需要这些服务的方法在XML模式
  • 数据类型的声明像绑定使用所使用的数据类型
  • 附加的服务相关的信息等

但MEX确实 CON保留所有WCF特定的配置设置 - 这是你发现的。 MEX将创建一个功能正常的客户端代理 - 但它从来没有将所有配置设置从服务器传输到客户端的意图。您需要在客户端自己手动编写此代码。

+0

那我应该用WSDL来代替吗? – 2011-05-12 19:13:39

+1

@Jose Manuel Ojeda:不,这没什么区别; MEX和WSDL几乎相同。没有任何方法可以通过MEX或WSDL自动交换配置信息,例如超时。 – 2011-05-12 19:43:32

+0

我试图修改maxMessageLenght时只是遇到了这个问题。如果你不能发布完整的绑定信息,这使得整个mex发布无用,因为你仍然必须在客户端有一些配置信息。 – Bruno 2017-07-27 09:01:11