Почему класс привязки WCF не имеет члена ReaderQuotas? - PullRequest
1 голос
/ 17 ноября 2008

Мне интересно, почему класс Binding в WCF не имеет свойства ReaderQuotas , в то время как его подклассы BasicHttpBinding и WSHttpBinding делает.

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

Есть ли способ обойти это ограничение?

1 Ответ

0 голосов
/ 17 ноября 2008

Причина заключается в том, что привязки предназначены для функционирования в качестве общей коммуникационной инфраструктуры, а ReaderQuotas является специфическим объектом SOAP. Вот почему вы видите его только в тех привязках, которые предназначены для передачи сообщений SOAP.

Оператор "as" для приведения типов к типам, которые вы хотите поддерживать, является, вероятно, вашим лучшим вариантом здесь.

...