web-dev-qa-db-ja.com

(413要求エンティティが大きすぎます

WCFサービスがあり、パラメーターを大きな文字列(1 MB以上)として渡したい場合のメソッドがあります

このwcfを実行し、WCFテストクライアントで、次のように構成を変更しました。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IMyService" sendTimeout="00:05:00"
                    maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                </binding>
            </basicHttpBinding>
        </bindings>

そして、このメソッドを呼び出そうとすると、リクエストエンティティが大きすぎます。

7
Robert

Matt Burlandが示唆したように、サービスエンドとクライアントを構成する必要があります。詳細については、 設定ファイルを使用したサービスの設定 を参照してください。このタスクは、クライアント側で行った作業と大差ありません。前述の記事からの抜粋です。

WCFは、.NET FrameworkのSystem.Configuration構成システムを使用します。 Visual Studioでサービスを構成するときは、Web.configファイルまたはApp.configファイルを使用して設定を指定します。構成ファイル名の選択は、サービス用に選択したホスティング環境によって決まります。 IIS=を使用してサービスをホストしている場合は、Web.configファイルを使用します。他のホスティング環境を使用している場合は、App.configファイルを使用します。

MaxReceivedMessageSize 2GBに設定しているため、すべてをint.MaxValueに設定しないことをお勧めします。これにより、DOS(Denial-Of-Service)攻撃などが可能になります。 MaxReceivedMessageSizeプロパティの備考セクションには、次のようにも記載されています。

WSHttpBindingBaseを使用するサービスがネットワーク上で受信できるメッセージのサイズは、各メッセージに割り当てられたメモリの量によって制限されます。このメッセージサイズの制限は、サービス拒否(DoS)攻撃への露出を制限することを目的としています。

この時点で機能させようとしているだけかもしれませんが、そのままにしておくことはお勧めできません。

5
Derek W

私も同じ問題に直面し、問題を解決しました。作業コード

(413)エンティティがWCFで大きすぎます app.configコードに従います。これは機能しており、これを使用して大きなファイルを送信できます

<bindings>
    <webHttpBinding>
        <binding name="myBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed" >
            <readerQuotas maxDepth="64" maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
        </binding>
    </webHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="ForecastREST_API.RESTServiceImplBehavior" name="ForecastREST_API.RestServiceImpl">
        <endpoint address="http://localhost:59624/RestServiceImpl.svc" binding="webHttpBinding" contract="ForecastREST_API.IRestServiceImpl" behaviorConfiguration="Web" bindingConfiguration="myBinding">
            </identity>
        </endpoint>
        <endpoint address="mex" binding="webHttpBinding" contract="IMetadataExchange"/>
    </service>
</services>
<behaviors>
    <endpointBehaviors>
        <behavior name="Web">
            <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            <webHttp defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
            <dispatcherSynchronization asynchronousSendEnabled="true" />
        </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
        <behavior name="ForecastREST_API.RESTServiceImplBehavior">
            <dataContractSerializer maxItemsInObjectGraph="2147483647" />
            <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
    </serviceBehaviors>
</behaviors>
4
Upasak Poddar