Назад | Перейти на главную страницу

WCF не работает на некоторых серверах

У меня исключение:

«Максимальное количество элементов, которые могут быть сериализованы или десериализованы в графе объектов - 65536».

на двух (промежуточный и производственный) из трех серверов, и я не могу понять, в чем проблема.

Поскольку он работает на тестовом сервере [IIS7.5 w2k8r2], я чувствую, что могу исключить web.config веб-сайта.

Я собрал machine.config и web.configs веб-серверов, сравнил их и не вижу никаких проблем.

Могут ли быть настройки конфигурации откуда-то еще?

Редактировать:

Это соответствующая часть конфигурационного файла:

</system.webServer>
<system.serviceModel>
<behaviors>
  <endpointBehaviors>
    <behavior name="TheEndPointBehaviour">
      <dataContractSerializer maxItemsInObjectGraph="6553600" />
    </behavior>
  </endpointBehaviors>
</behaviors>
<bindings>
  <basicHttpBinding>
    <binding name="TheEndPoint" maxReceivedMessageSize="6553600" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://ipaddress/folder/service.svc"
    binding="basicHttpBinding" bindingConfiguration="TheEndPoint"
    contract="Reference.IService" name="TheEndPoint" />
</client>

Разработчик использовал 6553600, однако я увеличил его до 2147483647, и это не работает.

Одинаковы ли операции, которые вы тестируете, на всех трех серверах? Если вы работаете с разными наборами данных, это может объяснить, почему вы не видите его на всех серверах.

Часто это является результатом того, что клиент не может достаточно сериализовать / десериализовать. Вы можете увеличить порог, добавив поведение конечной точки (или настраиваемое поведение, если вы используете их в своем проекте):

  <endpointBehaviors>
    <behavior name="blah">
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </endpointBehaviors>

Вам может потребоваться сделать это как в вашем web.config, так и в app.config вашего клиента.