4

クライアント側とサーバー側で WCF を使用するアプリケーションがあります。大量のデータを返すとエラーが発生します。

パラメータhttp://tempuri.org/:GetCurrentDatabaseObjectsResultをシリアル化しようとしてエラーが発生しました。InnerException メッセージは、「オブジェクト グラフでシリアライズまたはデシリアライズできる項目の最大数は 65535 です」でした。オブジェクト グラフを変更するか、MaxItemsInObjectGraph クォータを増やしてください。'。詳細については、InnerException を参照してください。

(主な重要なことは、MaxItemsInObjectGraph を増やす必要があることです)。

この記事を見つけました: Silverlight アプリケーションからプログラムで maxItemsInObjectGraph プロパティを設定するにはどうすればよいですか? しかし、これはクライアント側のみのようで、サーバーでこれを行う必要があります。

4

3 に答える 3

5

コード内:

foreach (OperationDescription op in factory.Endpoint.Contract.Operations)
{
    DataContractSerializerOperationBehavior dataContractBehavior =
                op.Behaviors.Find<DataContractSerializerOperationBehavior>()
                as DataContractSerializerOperationBehavior;
    if (dataContractBehavior != null)
    {
        dataContractBehavior.MaxItemsInObjectGraph = 100000;
    }
}

構成:

<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehaivor">
      <serviceAuthorization impersonateCallerForAllOperations="True" />
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceThrottling maxConcurrentCalls="2147483647" />
      <dataContractSerializer maxItemsInObjectGraph="65775" />
    </behavior>
  </serviceBehaviors>
</behaviors>
于 2011-01-06T08:40:57.200 に答える
4

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/specifying-data-transfer-in-service-contracts#controlling-the-serialization-process

「シリアライゼーション プロセスの制御」の見出しに移動します (または、maxItemsInObjectGraph を検索します)。

于 2011-01-06T06:44:07.863 に答える
2

ServiceBehavior 属性でプロパティを指定します。

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
于 2012-01-26T06:17:36.000 に答える