Как установить .NET Client веб-сервис ClientRuntime.MaxFaultSize - PullRequest
4 голосов
/ 12 октября 2010

Я вызываю веб-сервис Java, который возвращает тип FaultException, который содержит список ошибок.Таким образом, размер ответного сообщения всегда большой.

В моем клиенте c # (clr3.5) я получаю следующую ошибку

"Квота максимального размера сообщения для входящих сообщений(65536) было превышено. Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize в соответствующем элементе привязки. "

Я считаю, что для исправления этой проблемы необходимо установить ClientRuntime.MaxFaultSize msdn-doc

Есть ли способ сделать это в app.config?

Ответы [ 2 ]

5 голосов
/ 24 января 2011

Необходимо установить свойство ClientRuntime.MaxFaultSize, см. Здесь

  1. Создать свой MaxFaultSizeBehaviour

public class MaxFaultSizeBehavior : IEndpointBehavior
{
 private int _size;

 public MaxFaultSizeBehavior(int size)
 {
  _size = size;
 }

 public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
 {
 }

 public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
 {
  clientRuntime.MaxFaultSize = _size;
 }

 public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
 {
 }

 public void Validate(ServiceEndpoint endpoint)
 {
 }
}
  1. Применить созданное поведение вразмер клиента:

a) для ChannelFactory:


ChannelFactory channelFactory = new ChannelFactory(binding, endPointAddress);
channelFactory.Endpoint.Behaviors.Add(new MaxFaultSizeBehavior(500000));

b) или для сгенерированного прокси:


proxy.Endpoint.Behaviors.Add(new SetMaxFaultSizeBehavior(500000));
1 голос
/ 13 октября 2010

Когда мы столкнулись с этой проблемой, мы последовали сообщению об ошибке и изменили свойство MaxReceivedMessageSize в конфигурации привязок нашего app.config.Разве это не работает для вас?

   maxReceivedMessageSize="65536"  <!-- Change this -->

      messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
      useDefaultWebProxy="true">

РЕДАКТИРОВАТЬ: Если это все еще не работает, я нашел это сообщение .Он предлагает создать атрибут поведения контракта.В то время как пример кодирует ограничение в конструкторе атрибутов, вы можете извлечь его из собственного значения конфигурации.Прямой конфигурации .NET еще не видел, но я бы посмотрел на конфигурацию поведения.

...