Мне интересно, почему у класса Привязка в WCF нет свойства ЧитательКвоты, а у его подклассов BasicHttpBinding и WSHttpBinding есть.
Этот факт немного усложняет кодирование. Для меня я использую приведенный ниже код для извлечения информации о привязке из URI конечной точки MEX. Однако он только что получил привязку. Если я хочу изменить ЧитательКвоты привязки, я должен понижать его до подклассов Привязка, но я не могу сказать точную привязку во время выполнения.
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 устроен именно так?
Есть ли способ обойти это ограничение?





Причина в том, что привязки предназначены для работы в качестве общей инфраструктуры связи, а ReaderQuotas - это объект, специфичный для SOAP. Вот почему вы видите его только в привязках, которые предназначены для использования с передачей сообщений SOAP.
Оператор «as», чтобы попробовать приведение к типам, которые вы хотите поддерживать, вероятно, является лучшим вариантом здесь.
Я проверил MSDN, похоже, что у многих подклассов Binding есть ReaderQuotas, а не только привязка SOAP.
Каким образом квоты читателей зависят от SOAP? В лучшем случае они специфичны для XML, и даже в этом случае я не уверен в этом. Разве они не применимы и к средствам форматирования JSon, учитывая, что они реализованы внутри как средства чтения / записи xml?