質問

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

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

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

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

役に立ちましたか?

解決

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

「シリアル化プロセスの制御」の見出しまで進みます (または、maxItemsInObjectGraph を検索します)。

他のヒント

コード内の

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>

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

 [ServiceContract]
 [ServiceBehavior(MaxItemsInObjectGraph=100000)] 
public interface IDataService 
{
   [OperationContract] 
   DataPoint[] GetData(); 
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top