0

我得到的错误如下:

对象图中可以序列化或反序列化的最大项目数为 65536。更改对象图或增加 MaxItemsInObjectGraph 配额。

这是我的 app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IClusterControllerService">
                    <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
                </binding>
                <binding name="NetTcpBinding_IClusterManagementService">
                    <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />
                </binding>

            </netTcpBinding>
        </bindings>
        <client>
            <endpoint 
                address="some_address"
                binding="netTcpBinding" 
                bindingConfiguration="NetTcpBinding_IClusterControllerService"
                contract="ClusterControllerService.IClusterControllerService"
                name="NetTcpBinding_IClusterControllerService"
                behaviorConfiguration="BigObjectGraphBehavior">
            </endpoint>
            <endpoint 
                address="some_address"
                binding="netTcpBinding" 
                bindingConfiguration="NetTcpBinding_IClusterManagementService"
                contract="ClusterManagementService.IClusterManagementService"
                name="NetTcpBinding_IClusterManagementService"
                behaviorConfiguration="BigObjectGraphBehavior">
            </endpoint>
        </client>
        <behaviors>
            <endpointBehaviors>
                <behavior name="BigObjectGraphBehavior">
                    <dataContractSerializer maxItemsInObjectGraph="2147483647" />
                </behavior>
            </endpointBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

似乎 maxItemsInObjectGraph 设置没有生效。还有其他地方我必须设置此设置吗?

4

1 回答 1

1

您的配置似乎是正确的。

可以在客户端和服务器端设置此设置。还要检查这个错误的来源(如果服务器上的 IncludeExceptionDetailInFaults 为真,则向客户端返回异常)

这是此行为的示例配置。

//server side
<behaviors>
  <serviceBehaviors>
    <behavior name="LargeServiceBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

//client side
<behaviors>
  <endpointBehaviors>
    <behavior name="LargeEndpointBehavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </endpointBehaviors>
</behaviors>

如果您在我们的客户端上动态启动端点(使用 ChannelFactory),则必须手动设置 MaxItemsInObjectGraph 属性。

foreach ( var operation in channelFactory.Endpoint.Contract.Operations )  
{  
    var behavior = operation.Behaviors.Find() as DataContractSerializerOperationBehavior;  
    if ( behavior != null )  
    {  
        behavior.MaxItemsInObjectGraph = 2147483647;      
    }  
} 
于 2012-10-08T11:08:47.387 回答