我想知道为什么WCF中的类 Binding 没有属性 ReaderQuotas ,而它的子类 BasicHttpBinding < / strong>和 WSHttpBinding 可以。
这一事实使编码变得有点困难。对我来说,我使用下面的代码从MEX端点URI中提取绑定信息。然而,它只是绑定。如果我想更改绑定的 ReaderQuotas ,我必须将其转发到 Binding 的子类,但我无法在运行时告知确切的绑定
public static void LoadMex(string serviceMexUri,
ContractDescription contract,
out EndpointAddress endpointAddress,
out Binding serviceBinding)
{
EndpointAddress mexAddress = new EndpointAddress(serviceMexUri);
MetadataExchangeClient mexClient = new MetadataExchangeClient(mexAddress);
mexClient.ResolveMetadataReferences = true;
mexClient.OperationTimeout = TimeSpan.FromSeconds(30);
MetadataSet metaSet = mexClient.GetMetadata();
WsdlImporter importer = new WsdlImporter(metaSet);
ServiceEndpointCollection endpoints = importer.ImportAllEndpoints();
foreach (ServiceEndpoint ep in endpoints)
{
// we just use one endpoint for now.
if ((ep.Contract.Namespace == contract.Namespace) &&
(ep.Contract.Name == contract.Name))
{
endpointAddress = new EndpointAddress(ep.Address.Uri);
serviceBinding = ep.Binding;
return;
}
}
throw new ApplicationException(String.Format("no proper endpoint is found from MEX {0}", serviceMexUri));
}
有人知道为什么WCF会以这种方式设计吗?
有没有办法解决这个限制?
答案 0 :(得分:0)
原因是绑定旨在用作通用通信基础结构,而ReaderQuotas是SOAP特定对象。这就是为什么你只能在用于SOAP消息传输的绑定上看到它。
尝试演示你想要支持的类型的“as”语句可能是你最好的选择。