153

x64IIS 7.5 を使用する Windows 7 Ultimate システムでホストされている .NET 4.0 で WCF サービスを作成しました。サービス メソッドの 1 つに引数として「オブジェクト」があり、画像を含む byte[] を送信しようとしています。この画像のファイル サイズが約 1 未満の場合に限ります。48KB、すべてうまくいきます。しかし、より大きな画像をアップロードしようとすると、WCF サービスからエラーが返されます。(413) Request Entity Too Large. もちろん、エラー メッセージを検索するのに 3 時間かかりました。だから私がやったことは、次のコマンドを使用することです(10485760 = 10MB):

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

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

また、IIS マネージャーを使用してサイトを開き、[管理] の下の [構成エディター] に移動して値を設定しました。残念ながら、まだ Request Entity Too Large エラーが発生しており、本当にイライラしています。

それで、このエラーを修正するために他に何ができるか知っている人はいますか?

4

15 に答える 15

218

それは IIS の問題ではなく、WCF の問題です。WCF は既定でメッセージを 65 KB に制限し、大きなメッセージによるサービス拒否攻撃を回避します。また、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>
于 2012-04-12T12:39:33.127 に答える
63

WCF REST サービスを使用する IIS 7.5 でも同じ問題が発生していました。65k を超えるファイルを POST 経由でアップロードしようとすると、エラー 413 "Request Entity too large" が返されます。

最初に理解する必要があるのは、web.config で構成したバインドの種類です。ここに素晴らしい記事があります...

BasicHttpBinding 対 WsHttpBinding 対 WebHttpBinding

REST サービスがある場合は、「webHttpBinding」として構成する必要があります。修正は次のとおりです。

<system.serviceModel>

<bindings>
   <webHttpBinding>
    <binding 
      maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647" 
      maxBufferSize="2147483647" transferMode="Streamed">
    </binding>  
   </webHttpBinding>
</bindings>
于 2013-06-07T18:30:43.543 に答える
28

私は同じ問題を抱えていて、それをuploadReadAheadSize解決しました:

http://www.iis.net/configreference/system.webserver/serverruntime

「値は 0 から 2147483647 の間でなければなりません。」

cmd を実行したくない場合は、applicationHost.config-fle で簡単に設定できます。

WindowsFOLDER\System32\inetsrv\config(2008サーバー)にあります。

メモ帳で開く必要があります。最初にファイルのバックアップを行います。

config のコメントによると、セクションのロックを解除する推奨される方法は、ロケーション タグを使用することです。

<location path="Default Web Site" overrideMode="Allow">
    <system.webServer>
        <asp />
    </system.webServer>
</location>"

そのため、下部に書き込むことができます(以前は存在しなかったため)。ここに書きmaxvalueます - 必要に応じて独自の値を書き込んでください。

<location path="THENAMEOFTHESITEYOUHAVE" overrideMode="Allow">
    <system.webServer>
        <asp />
        <serverRuntime uploadReadAheadSize="2147483647" />
    </system.webServer>
</location>

たとえば、最後に置いた場合</configuration>、どこにあるかがわかります。

問題が解決することを願っています。これは私にとって SSL オーバーヘッドの問題であり、投稿が多すぎるとアプリケーションがフリーズし、(413) Request Entity Too Largeエラーが発生しました。

于 2013-03-29T08:15:09.303 に答える
24

maxWCF サービス構成ファイルのバインド内で設定を行っていたにもかかわらず、次のエラー メッセージが表示されました。

<basicHttpBinding>
        <binding name="NewBinding1"
                 receiveTimeout="01:00:00"
                 sendTimeout="01:00:00"
                 maxBufferSize="2000000000"
                 maxReceivedMessageSize="2000000000">

                 <readerQuotas maxDepth="2000000000"
                      maxStringContentLength="2000000000"
                      maxArrayLength="2000000000" 
                      maxBytesPerRead="2000000000" 
                      maxNameTableCharCount="2000000000" />
        </binding>
</basicHttpBinding>

これらのバインド設定が適用されていないように見えたため、次のエラー メッセージが表示されました。

IIS7 - (413) サービスへの接続時に要求エンティティが大きすぎます。

問題

のタグname=""内の属性は、思っていたとおり、自由なテキスト フィールドではないことに気付きました。これは、このドキュメント ページで説明されているサービス コントラクトの実装の完全修飾名です<service>web.config

それが一致しない場合、バインディング設定は適用されません!

<services>
  <!-- The namespace appears in the 'name' attribute -->
  <service name="Your.Namespace.ConcreteClassName">
    <endpoint address="http://localhost/YourService.svc"
      binding="basicHttpBinding" bindingConfiguration="NewBinding1"
      contract="Your.Namespace.IConcreteClassName" />
  </service>
</services>

それが誰かの痛みを救うことを願っています...

于 2016-03-22T16:19:22.233 に答える
2

私の場合、BizTalk の受信場所の「最大受信メッセージ サイズ」を増やす必要がありました。また、デフォルト値が 64K であるため、web.config で構成した内容に関係なく、すべてのメッセージが BizTAlk によってバウンスされました。

于 2015-05-21T11:45:35.353 に答える
2

IIS WCF エラー 413 : Request entity to large を探していて、Sharepoint で WCF サービスを使用している他の人にとって、これはあなたのための情報です。MultipleBaseAddressBasicHttpBindingServiceHostFactory を使用している場合、他のサイト/投稿で提案されているアプリケーション ホストと web.config の設定は、SharePoint では機能しません。SP Powershell を使用して SPWebService.Content サービスを取得し、新しい SPWcvSettings オブジェクトを作成して、上記のようにサービスの設定を更新できます (それらは存在しません)。設定を作成および追加するときは、サービスの名前 ([yourservice.svc] など) を使用することを忘れないでください。詳細については、このサイトを参照してくださいhttps://robertsep.wordpress.com/2010/12/21/set-maximum-upload-filesize-sharepoint-wcf-service

于 2015-04-07T21:16:49.160 に答える
2

これを追加した後、私の問題はなくなりました:

  <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits
                    maxAllowedContentLength="104857600"
                />
            </requestFiltering>
        </security>
  </system.webServer>
于 2021-02-16T23:04:24.077 に答える
2

私の場合、サービスの名前空間が変更され、サービス タグが古い名前空間を指していたため、このエラー メッセージが表示されていました。名前空間を更新すると、エラーが消えます。

<services>
  <service name="My.Namespace.ServiceName"> <!-- Updated name -->
    <endpoint address="" 
              binding="wsHttpBinding" 
              bindingConfiguration="MyBindingConfiguratioName" 
              contract="My.Namespace.Interface" <!-- Updated contract -->
    />
  </service>
</services>
于 2018-07-12T20:49:34.700 に答える