WCF 在某些服务器上不起作用

WCF 在某些服务器上不起作用

我遇到了例外:

“对象图中可序列化或反序列化的项目最大数量为‘65536’”

在三台服务器中的两台(Staging 和 Production)上,我想不出为什么会出现问题。

由于它在测试服务器 [IIS7.5 w2k8r2] 上运行,我觉得我可以排除该网站的 web.config。

我收集了 machine.config 和 web 服务器的 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 中执行此操作。

相关内容