3

わかった。通常、私は質問をするのが嫌いですが、私が抱えているこの問題は私の頭を悩ませてきました.

同社は、SharePoint と通信する wcf サービスを開発しています。私たちはなんとかそれを機能させ、SharePointからの呼び出しとファイルを受信しましたが、小さなファイルに対してのみ機能しました. sharepoint の設定は、最大 250 MB のファイルを受け入れるように設定されています。web.config ファイルでは、メッセージ サイズに関連するすべての設定が最大 ( int32) に設定されています。サービスを実行すると、22 KB を超えるファイルは受け入れられません。

トレースを行ったところ、1 つの警告と 1 つのエラーが発生しました。最初に、次のような警告が表示されます。

説明 構成システムは、異なる構成スコープで重複するキーを検出し、より新しい値でオーバーライドしています。

そして、メッセージの最大サイズが [64 KB] を超えているというエラーが表示されました。

問題は、web.config に絶対最大サイズを設定したにもかかわらず、23 KB 以上のファイルでこのエラーが発生することです。警告は、構成ファイルが上書きされていることを示していますが、何が原因ですか? 解決策を求めて過去 3 日間あらゆる場所を探しましたが、何も見つかりませんでした。

何が間違っているのか誰にも分かりますか?何がファイルを上書きしている可能性がありweb.configますか? また、何らかの理由でデフォルト値で上書きされた場合、22 KB を超えるメッセージを受け入れないのはなぜですか。

どんな助けでも大歓迎です。

編集:問題が見つかりました

まだ同様の問題を抱えている人のために、私が見つけたものをここに載せます。

もちろん、通常のメッセージサイズの設定

<binding maxReceivedMessageSize="2147483647">            
        <readerQuotas maxDepth="32"
         maxStringContentLength="2147483647"
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxNameTableCharCount="2147483647" />
        </binding>

そして、問題を修正したサンプルコードで偶然見つけた別の設定(サイズが最大64MBのファイルでテストを実行しても、それ以上の問題はありませんでした)

<system.webServer>
<serverRuntime uploadReadAheadSize="2147483647"  />
<modules runAllManagedModulesForAllRequests="true"/>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="2147483647" />
  </requestFiltering>
</security>
</system.webServer>

どうやら、requestLimits maxAllowedContentLengthデフォルトで非常に低く設定されており、おそらくセキュリティ設定であるため、他のすべての設定を上書きしていました。

serverRuntime uploadReadAheadSize最大サイズに影響を与える可能性がありますが、直接的な意味ではありません。私は説明が下手なので、公式ドキュメントを読んだほうがいいでしょう。

4

2 に答える 2

0

まず、 web.config の継承に関する Jon Galloway の投稿を読んでください。

第 2 に、メッセージ サイズはファイル サイズ以外にも依存します。配列内のバイナリ データは base64 でエンコードされます (最大 30% のサイズが追加されます)。エンコーディングの選択もメッセージ サイズに影響します。UTF-16 は文字ごとに 2 バイトを送信しますが、UTF-8 はマルチバイト スキーマを使用します。

于 2012-10-19T11:09:54.403 に答える
0

Web.config ファイルの更新または変更の唯一のポイントは、サービス参照を更新するときです。
または、Web.config ファイルの内容を更新するコードを記述した場合。

于 2012-10-19T11:02:01.907 に答える