簡単な答えは、この方法で関係するバインディングの下でリーダー クォータを維持することです (バインディング ノードの下の maxReceivedMessageSize も増やします) 。現実の世界ではあらゆるサイズのメッセージを処理する必要がありますが、wcf 設計ごとに必要なサイズ制限ごとに数を制限する必要があります。
<binding name="BindingForBiggerMessages"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
また、wcf エンドの構成で行った変更がクライアント アプリ側の構成でも行われていることを確認してください。そうしないと機能しません。
詳しくは---------------------------
これは、この問題をローカルで再現する方法を説明するためのものです。これは、wcf コミュニティでよく知られているエラーであり、上で既に共有されている有効な解決策があるため、実際には必要ありません。
「Secret Squirrel」リンクはこれを修正するのに役立つと思いますが、まだ機能していない場合は、これを読んでください。これらのキーがリーダー クォータの下にあることが明確になります。
http://lucvknet.blogspot.com/2010/09/when-wcf-blows-whistle-part1.html
集中する必要があるキーはMaxStringContentLengthだと思います。実際には、実稼働アプリのクライアントが wcf にメッセージを送信しています。これは、フィールド/プロパティの 1 つに 8192 文字を超えています (実稼働の問題の説明によると仮定)。
MaxStringContentLengthがバインディング (大きなメッセージ/オブジェクトに対して破損しているバインディング) で定義/構成されている場合は、wcf 構成 (ローカルで実行している実稼働コピー) を参照してください。定義されていない場合は、文字数よりも小さい値で定義してください。 、メッセージ内の特定のフィールドをテストしたい (中断する)。
したがって、8192文字を超える1つの要素/フィールドを持つメッセージでwcfを中断したい場合は、8192未満に保ち、8192を超える文字列フィールド/メンバーを持つオブジェクト( wcfメソッドへのパラメーター)でwcfを呼び出しますその中に文字がある場合、それは壊れるはずです。
注:構成でMaxStringContentLengthが既に 8192 に定義されていることがわかっている場合でも、大きなメッセージ/データで問題が発生していない場合は、MaxStringContentLength によって設定された文字制限を超えるような値が設定されたフィールドがメッセージに 1 つあることを確認してください)
壊れて、本番アプリケーションと同じエラーが発生した場合は、より高い値に設定してください。
注:これらのキーが wcf バインディングで定義されていない場合、wcf はこれらのクォータが定義されていないため、これらのクォータのデフォルト値を使用します。そのため、問題を再現するには、最初に自分で定義してデフォルト設定を上書きします。