WCFの構成パラメータmaxItemsInObjectGraphによる問題

1992 ワード

どのシステムをテストしても、データテーブルの容量テストは比較的重要な一環であり、ここには2つの重点的な注目点がある:1、単表のデータがある程度に達したとき、ページのロード時間が受け入れられるかどうか2、単表のデータがある程度に達したとき、その表の関連機能が正常かどうか
自分が最近この方面のテストをしている時、1つの問題を発見して、問題の説明:クラス表の記録数が6554条以上の時、学生の管理インタフェースのロードに失敗しました
この問題を提出した後、開発に時間がかかったが、コードに何の問題も見つからなかった後、「テスト環境問題」に返信し、この問題がテスト環境によるものではないことを確認するために、自分でよく分析し、対応する分析案を設計した.分散チェックの最初のステップ:まずIIS問題であるかどうかをチェックします:問題環境からIISを隔離して(正常な環境のデータベースに接続させる)テストを行いますすべて正常で、IISに問題がないと判断することができます第2のステップ:そこで問題がデータベースの部分にあることを確定することができます.データベースの問題はまずデータ構造から分析を始め、正常な環境のデータベースと比較し、正常な第3歩:問題ライブラリと正常なデータベースの違いを分析し、問題在庫が大きな背景データにあることを発見する.これによって生じた問題であるべきだ.ステップ4:特定の問題テーブルをロックします.分析と開発者との議論を通じて、ログインシステムを理解した後、ページはすぐに2つのデータベーステーブルをロードします.ステップ5:ターゲット・データベース・テーブルのデータを削減し、最終的にクラス・テーブルに問題があることをテストし、異常データ量の境界値を決定します.
問題の原因:WCFの構成パラメータmaxItemsInObjectGraphがデフォルト値65535を超えると、WebServiceでシーケンス化中にシーケンス化されたオブジェクトの数が65535を超え、つまりmaxItemsInObjectGraphのデフォルトになってしまいます.これは、クライアントとWebServiceの間でオブジェクトが渡され、WebServiceは毎回オブジェクトがシーケンス化されるため、シーケンス化されたオブジェクトの数に制限があるためです.デフォルトは65535ですが、このオブジェクトの個数はどのように計算されますか?
たとえば、WebService側にオブジェクトStudentがあります.
Public class Student

{
     Public int ID{get;set;}

    public Name{get;set;}

}

渡す過程で、オブジェクトの個数は、そのオブジェクト自体に含まれるオブジェクトの個数を加えたものであり、これについて言えば3つのオブジェクトである.この3つのオブジェクトが、maxItemsInObjectGraph=オブジェクト個数+2(maxItemsInObjectGraphのデフォルト値が0であると仮定)を直列化できるようにするには、maxitemsnObjectGraphがオブジェクト個数+2よりも大きい場合のみ、コンパイラはエラーを報告しない.そうしないと、上記のエラーが発生する.それだけではないのですが、この前提で1つのレコードしかない場合、2つのレコードであれば、MaxItemSlnObjectGraphの最小値=オブジェクト個数*に記録された本数(このオブジェクトの1つの集合である可能性がある)+2、つまり、渡されたデータが多ければ多いほど、MaxItemSlnObjectGraphの値が大きくなり、彼のデフォルト値(65535)を超えると上記のエラーが発生します
ここまで言うと、解決策も簡単で、MaxItemSlnObjectGraphの値を修正します.