Метод WCF выдает исключение максимального количества элементов в графе объектов: «65536».

Я получаю исключение, когда возвращается слишком много объектов:

Средство форматирования выдало исключение при попытке десериализации сообщения: Произошла ошибка при попытке десериализации параметра http://.../Contract:GetBlaBlaResult. Сообщение InnerException было «Максимальное количество элементов, которые могут быть сериализованы или десериализованы в графе объектов, равно« 65536 ». Измените граф объектов или увеличьте квоту MaxItemsInObjectGraph. '. Пожалуйста, смотрите InnerException для более подробной информации.

Я просмотрел его и добавил в разделе поведения на стороне сервера:

<behaviors>
   <serviceBehaviors>
      <behavior name="MyServiceBehavior">
         <dataContractSerializer maxItemsInObjectGraph="2147483646"/>

        ...

И на стороне клиента:

<behaviors>
   <endpointBehaviors>
       <behavior name="maxItems">
          <dataContractSerializer maxItemsInObjectGraph="2147483646" />
       </behavior>
   </endpointBehaviors>
</behaviors>

Но кажется, что это игнорируется, и исключение продолжает возникать.

Дело в том, что я использую XmlSerializer (для атрибутов в элементах):

[ServiceContract(Namespace = "http://BlaBla.com/webservices/BlaBlaService")]
[XmlSerializerFormat(SupportFaults = true)]
public interface IBlaBlaServices
{
    [OperationContract]
    BlaBlaResponse GetBlaBla(BlaBlaRequestMessage searchBlaBlaRequest);
}

и исключение, как видите, относится к dataContractSerializer (как и к конфигурации, которую я добавил выше).

Это XmlSerializer все испортил?

Может кто-нибудь посоветовать, пожалуйста?

Большое спасибо :)


person graumanoz    schedule 31.08.2010    source источник
comment
stackoverflow.com/questions/7476853/   -  person Uğur Gümüşhan    schedule 30.01.2013


Ответы (1)


Просто чтобы убедиться, применяете ли вы поведение MyServiceBehavior к определению службы в конфигурации службы и поведение maxItems к определению конечной точки в конфигурации клиента (атрибут behaviorConfiguration)?

person Jeff    schedule 31.08.2010
comment
Да, хотя мне это кажется странным, потому что он должен быть кроссплатформенным, и идея указать клиенту, как настроить его сторону, выглядит неуклюжей. - person graumanoz; 31.08.2010
comment
Да, действительно, немного неловко. Если вы примените атрибут ServiceBehavior для установки MaxItemsInGraph, это сработает? [ServiceBehavior(MaxItemsInObjectGraph = 2147483646)] (в реализации службы, а не в контракте). - person Jeff; 31.08.2010
comment
Спасибо Jeffn825 за внимание :) В конце концов, настройка поведения была решением, и XmlSerializer не имеет ничего общего с проблемой. Я просто ошибся с названием поведения... - person graumanoz; 31.08.2010
comment
Мне помогло добавление элемента dataContractSerializer с повышенным лимитом к моему поведению/serviceBehaviors/behavior. - person Suncat2000; 23.01.2012