2009-08-27 16 views
15

から読み込まれていない:WCF maxReceivedMessageSizeは、私は、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> 

私がしようとすると(のみ〜250キロバイト)、私が手にこのサービスに大きめのファイルを渡します

着信メッセージ(65536)の最大メッセージサイズのクォータが を超えました:svclogファイルに記録例外。クォータを増やすには、 のMaxReceivedMessageSizeプロパティを適切なバインディング要素の に設定します。

あなたが設定の上部に結合部分から見ることができるように、私は5000000にmaxReceivedMessageSizeを設定しようとしたが、サービスはまだ間違っているものにとして65536それがデフォルトに設定されているすべてのアイデアを考えていますまたは「適切な」結合要素であるか?

答えて

27

さらに設定があります:-) <binding>タグで「maxBufferPoolSize」と「maxBufferSize」を試してみてください。

しかし、最大の問題は、エンドポイントがではなく、というバインド設定を参照していることです。それが役に立つなるよう

<endpoint address="" 
      binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 

は、あなたはそれへの参照を追加する必要があります - ちょうどそれが「デフォルト」は機能しません呼び出す.....

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="default" 
      contract="Core.TOAService.ITOAService"> 

あなたが先にあなたの倍のです;-) WCF 4(.NET 4.0 - 2009年の今年の後半)には、明示的に名前を付けたり参照したりせずに "デフォルトのバインディング設定"を定義することができますが、今のところリンクを作成する必要がありますエンドポイントとそのバインディングとバインディング(またはビヘイビアー)設定との間には、

マーク

+0

はい、バインディング設定を参照する必要があります。 バッファの変更はおそらく必要ありません。 –

+0

3つのバッファの変更が本当に必要かどうかは決して決してありません。試してみると分かります。残念ながら、これらの設定を調整する方法については、実際には良い、包括的なドキュメントと説明はありません。 –

+0

Doh、サーバーVS2010を使用して3.5サービスを構築してください多くのおかげで、それはそれを修正しました。 –

1

サイズを設定する必要がある場所がいくつかあります。あなたのケースでは、私はあなたが読み込み割り当てを追加する必要があると思います。次に例を示します。

<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> 
15

WCFテストクライアントを使用しているときにも、このエラーメッセージを取得している場合、クライアントは別のMaxBufferSizeの設定を持っているので、それはです。 SvcConfigEditorと木

  • [編集]を選択し

    のリストの一番下に設定ファイルにノードを右クリックして

    1. :問題を解決するには

      MaxBufferSizeを含む編集可能な設定が表示されます。

      注:自動生成プロキシクライアントは、デフォルトで65536にMaxBufferSizeの設定します。

  • +1

    いいキャッチ!それは私の問題を解決した... –

    +0

    感謝します! – RoeeK

    関連する問題