WCF mex does not contain the complete binding information from the host
我正在发布带有MEX端点的服务以进行元数据交换,并且我正在使用下面的代码来发现它并获取元数据信息
1 2 3 4 5 6 7 8 9 10 | 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; |
当我在客户端中获得元数据信息时,绑定信息(
这是主机中的绑定信息
1 2 3 4 5 6 | <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服务绑定采用默认值而不是自定义值
我想知道我做错了什么还是误解了元数据交换的概念。
我要执行的操作是将所有必要的信息发送给我的客户端,以便他们可以自行自动配置它们,并且不进行任何硬代码配置。
我不认为您做错了什么-您只是对元数据交换期望太高了。
MEX的目的是能够以编程方式发现新服务,并为这些服务创建客户端代理。为此,存在WSDL-基本上,WSDL中包含的所有内容都是元数据交换的一部分:
- 服务合同/服务方式
- 这些服务方法所需的参数
- XML模式中用于所使用数据类型的数据类型声明
- 其他服务相关信息,例如使用的绑定等。
但是MEX并不包含所有WCF特定的配置设置-这就是您所发现的。 MEX将创建一个可运行的客户端代理-但它从未打算将所有配置设置从服务器传输到客户端。您需要在客户端上手动编写此代码。