2

「文字列コンテンツの最大長のクォータ (8192)」の問題を解決しようとしていますが、この投稿に答えがあります。

XML データの読み取り中に文字列コンテンツの最大長クォータ (8192) を超えました

実稼働サーバーの構成をいじくり回したくないので (太った指の深刻なケース)、コードと構成をローカル マシンにコピーして、元の構成でテストを実行します。問題が分からないので、新しい設定で問題が解決するかテストできません.... grrr.

デフォルトの readerQuotas 値はどこで設定されますか?

machine.config と web.config の両方で %\Microsoft.NET\Framework64\v4.0.30319\Config を確認しました。正しく見えるものは何も見えません。助けはありますか?

繰り返しますが、私はこの問題をローカルで再現しようとしています。私のマシンを壊すのに助けていただければ幸いです。

4

4 に答える 4

0

簡単な答えは、この方法で関係するバインディングの下で​​リーダー クォータを維持することです (バインディング ノードの下の 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 はこれらのクォータが定義されていないため、これらのクォータのデフォルト値を使用します。そのため、問題を再現するには、最初に自分で定義してデフォルト設定を上書きします。

于 2013-09-12T11:20:50.853 に答える
0

これを試して

<system.serviceModel>
<bindings>
  <basicHttpBinding>
     <binding name="BindingName" maxReceivedMessageSize="10000000">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647"/>
     </binding>
 </basicHttpBinding>
</bindings>
</system.serviceModel> 
于 2013-09-12T12:33:24.870 に答える