Как настроить 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