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 が true の場合、クライアントに例外が返されます)。

この動作のサンプル構成を次に示します。

//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 に答える