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

Я получаю исключение:

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

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

Поскольку он работает на тестовом сервере [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, и это не работает.

1 ответ

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

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

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

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

Другие вопросы по тегам