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>
そして、このメソッドを呼び出そうとすると、リクエストエンティティが大きすぎます。
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)攻撃への露出を制限することを目的としています。
この時点で機能させようとしているだけかもしれませんが、そのままにしておくことはお勧めできません。
私も同じ問題に直面し、問題を解決しました。作業コード
(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>