1. ホーム
  2. wcf

[解決済み] (413) リクエストエンティティが大きすぎる|uploadReadAheadSize

2022-02-13 15:48:48

質問

.NET 4.0を使ってWCFサービスを書き、Windows 7でホストしています。 x64 IIS 7.5を搭載したUltimateシステム。 サービスメソッドの1つは、引数として「オブジェクト」を持っており、私は画像を含むbyte[]を送信しようとしています。 この写真のファイルサイズが約48KB以下である限り、すべてがうまくいきます。しかし、より大きな画像をアップロードしようとすると、WCFサービスはエラーを返します。 (413) Request Entity Too Large. もちろん、3時間かけてエラーメッセージをググってみたが、このテーマについて見たすべてのトピックは、「uploadReadAheadSize」プロパティを上げることを示唆している。 そこで、私が行ったのは、以下のコマンドを使うことです(10485760 = 10MB)。

"appcmd.exe set config -section:system.webserver/serverruntime/uploadreadaheadsize: 10485760 /commit:apphost"

"cscript adsutil.vbs set w3svc/<APP_ID>/uploadreadaheadsize 10485760"

また、IISマネージャーを使用して、サイトを開き、管理の下の"Configuration Editor"に行って値を設定しました。 残念ながら、Request Entity Too Largeエラーはまだ出ていて、本当にイライラしてきます

このエラーを解決するために、他に何を試せばいいか、誰か知っていますか?

解決方法を教えてください。

これはIISの問題ではなく、WCFの問題です。WCFはデフォルトでメッセージを65KBに制限しており、大きなメッセージによるDoS攻撃を回避しています。また、MTOMを使用しない場合、byte[]をbase64エンコードした文字列を送信します(サイズが33%増加) => 48KB * 1,33 = 64KB

この問題を解決するには、より大きなメッセージを受け入れるようにサービスを再設定する必要があります。この問題は、以前は 400 Bad Request エラーが発生しましたが、新しいバージョンの WCF では、このタイプのエラーに対する正しいステータス コードである 413 を使用するようになりました。

を設定する必要があります。 maxReceivedMessageSize をバインディングに追加してください。また readerQuotas .

<system.serviceModel>
  <bindings>
    <basicHttpBinding>
      <binding maxReceivedMessageSize="10485760">
        <readerQuotas ... />
      </binding>
    </basicHttpBinding>
  </bindings>  
</system.serviceModel>