我得到的错误如下:
可以序列化或反序列化的最大项目数 对象图是65536.更改对象图或增加 MaxItemsInObjectGraph quota。
这是我的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设置没有生效。 我还有其他地方可以设置此设置吗?
答案 0 :(得分: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;
}
}