28

WCF Web サービスへの呼び出しが失敗するSystem.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.

Fiddler を確認すると、以下を送信していることがわかります。

コンテンツの長さ: 149839

これは65KBを超えています。

サーバーで WCF トレースを有効にすると、次のように表示されます。

System.ServiceModel.ProtocolException: 受信メッセージの最大メッセージ サイズ クォータ (65536) を超えました。クォータを増やすには、適切なバインド要素で MaxReceivedMessageSize プロパティを使用します。

このプロパティを追加しても問題は解決しません。

私はそのプロパティだけを試してみましたが、(後で) 投稿が提案した他のさまざまなプロパティを試しました。これが私が現在(サーバー上に)持っているものです:

<basicHttpBinding>

  <binding name="PricerServiceSoap"
    closeTimeout="00:10:00" openTimeout="00:10:00"
    receiveTimeout="00:10:00" sendTimeout="00:10:00"
    maxBufferSize="2147483647"    
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">

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

</basicHttpBinding>

私の唯一のエンドポイント(の下<client>)は次のとおりです。

<endpoint address="/NetPricingService/Service.asmx"
  binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
  contract="Pricing.PricerService.PricerServiceSoap"
  name="PricerServiceSoap" />

私も追加しました:

<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

下に<behavior>

私も実行しました(IIS 7の場合):

%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost

何も違いはありません。

問題の 1 つは、これが古い ASMX サービスを置き換えることを意図した WCF サービスであることです。サービスの骨格は、既存のWSDLからsvcutilで生成しました。クライアント構成を変更できません(クライアントは複数の言語で表示されます)。私のテスト クライアント プロジェクトは、Web 参照の追加 ( の下Add Service Reference / Advanced) を使用してサービスをインポートしたため、WCF 構成はありません。ただし、古い ASMX サービスを指定すると、テスト クライアントは機能します。

これを修正または診断するにはどうすればよいですか?

追加情報

Microsoft Service Configuration Editor を使用して構成を生成すると (maxReceivedMessageSize と maxBufferSize を設定)、機能します。問題は、エンドポイントが で指定され<service>、/NetPricingService/Service.asmx 相対アドレスを指定できないことです。svcutil によって生成された構成 (エンドポイントが下にある場所) でバインディングを編集する<client>と、大きな要求では機能しません。

4

6 に答える 6

26

答えは私の顔を見つめていました。

svcutil によって生成された構成は、クライアント用でした。サーバーで使用していました。

で指定されたエンドポイントのバインディングを編集していました<client>が、サービスにまったく違いはありませんでした。

適切な<service>エンドポイントを追加し、バインディングで maxReceivedMessageSize と maxBufferSize を設定すると、問題が解決しました。

于 2013-02-01T23:20:22.790 に答える