WCFサービス用に次のサーバー側app.configがあります。
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="default" maxReceivedMessageSize="5000000">
<readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" />
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Core.TOAService.Service1Behavior"
name="Core.TOAService.TOAService">
<endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<Host>
<baseAddresses>
<add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" />
</baseAddresses>
</Host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Core.TOAService.Service1Behavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
このサービスに大きなファイル(約250KBのみ)を渡そうとすると、svclogファイルに例外が記録されます。
着信メッセージの最大メッセージサイズクォータ(65536)を超えました。クォータを増やすには、適切なバインディング要素でMaxReceivedMessageSizeプロパティを使用します。
構成の上部にあるバインディングセクションからわかるように、maxReceivedMessageSizeを5000000に設定しようとしましたが、サービスはそれでもデフォルトの65536に設定されていると見なします。何が間違っているか、またはどれが「適切」であるかに関するアイデア「バインディング要素?
その他の設定があります:-)<binding>
タグで「maxBufferPoolSize」と「maxBufferSize」を試してください。
しかし、最大の問題は次のとおりです。エンドポイントはnotそのバインディング構成を参照します!
<endpoint address=""
binding="wsHttpBinding" contract="Core.TOAService.ITOAService">
役立つように、参照を追加する必要があります。「デフォルト」と呼ぶだけでは機能しません。
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="default"
contract="Core.TOAService.ITOAService">
あなたは時代を先取りしています;-) WCF 4(.NET 4.0を使用-2009年後半のいつか)では、明示的に名前を付けて参照しなくても「デフォルトのバインディング構成」を定義できますが、今のところは、エンドポイントとそのバインディング、およびバインディング(または動作)構成の間にリンクを作成する必要があります!
マーク
WCFテストクライアントの使用中にこのエラーメッセージが引き続き表示される場合は、クライアントに個別のMaxBufferSize設定があるためです。
問題を修正するには:
MaxBufferSizeを含む編集可能な設定のリストが表示されます。
注:自動生成されたプロキシクライアントも、デフォルトでMaxBufferSizeを65536に設定します。
サイズを設定する必要がある場所がいくつかあります。あなたの場合、読み取りクォータを追加する必要があると思います。次に例を示します。
<basicHttpBinding>
<binding name="httpBasicBinding_Service" closeTimeout="00:03:00"
openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00"
maxBufferSize="2000001"
maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001">
<readerQuotas maxDepth="2000001" maxStringContentLength="2000001"
maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" />
</binding>
</basicHttpBinding>