Как настроить MaxReceivedMessageSize программно при использовании WCF-клиента?

Я хочу установить свойство MaxReceivedMessageSize на какой-то более высокий предел (из-за ошибки запроса 400) в моем клиенте программно. Это код, который я использую...

WCFServiceTestClient wcfClient = 
    new WCFServiceTestClient(new wsHttpBinding(), strServiceURL);

Мой служебный url является динамическим и, следовательно, не может использовать web.config.

//The following code doesnt seem to take effect
((WSHttpBinding)wcfClient.ChannelFactory.Endpoint.Binding)
        .MaxReceivedMessageSize = 2147483647;

Что я делаю неправильно?
Любая помощь приветствуется. Благодаря
Pratt

Ответы

Ответ 1

Вы пробовали переупорядочивать вызовы, чтобы установить MaxReceivedMessageSize перед созданием экземпляра клиента? например,

var binding = new wsHttpBinding();
binding.MaxReceivedMessageSize = Int32.MaxValue; 
var wcfClient = new WCFServiceTestClient(binding, strServiceURL); 

Это может или не может помочь вам в ошибке 400.

Ответ 2

У меня были подобные проблемы в моем wcf-сервисе, и я решил его с помощью:

CustomBinding binding = (CustomBinding)PDAServiceContractClient.CreateDefaultBinding();
            HttpTransportBindingElement httpBindingElement = new HttpTransportBindingElement();
            httpBindingElement.MaxBufferSize = Int32.MaxValue;
            httpBindingElement.MaxReceivedMessageSize = Int32.MaxValue;
            binding.Elements.Add(httpBindingElement);

            string address = PDAServiceContractClient.EndpointAddress.Uri.ToString();
            m_proxy = new PDAServiceContractClient(binding, new EndpointAddress(address));

Ответ 3

Это хорошо работает, хотя это не так очевидно. Он сохраняет все существующие связывающие свойства и настраивает только MaxReceivedMessageSize (что, кстати, также увеличивает MaxBufferSize до того же размера).

Dim oClient as WcfClient = New WcfClient
CType(oClient.Endpoint.Binding, ServiceModel.BasicHttpBinding).MaxReceivedMessageSize = Int32.MaxValue