3

.NET 4 RC を使用して、IIS でホストされている WCF REST サービスを使用しています。サービスへの POST 呼び出しは、JSON を使用してシリアル化されます。DataMember (文字列) のいずれかのサイズが 8K を超えるまで、すべて正常に機能します。この場合、MaxStringContentLength を超えたことを示す以下のエラーが表示されます。endPoint の maxStringContentLength 属性が増加し、構成ファイルから正しく読み取られるようになりました。

ウェブ構成は次のとおりです。

<services>
  <service name="MyServiceServer" >
    <endpoint address="http://localhost/MyService" kind="webHttpEndpoint" endpointConfiguration="serviceEndPoint" contract="IMyService">
    </endpoint>
  </service>
</services>

<standardEndpoints>
  <webHttpEndpoint>
    <standardEndpoint name="serviceEndPoint" maxReceivedMessageSize="2048000"  maxBufferSize="2048000" maxBufferPoolSize="0">
      <readerQuotas maxStringContentLength="2048000" maxArrayLength="2048000"  maxDepth ="65000"/>
      <security mode="None">
        <transport clientCredentialType="None"/>
      </security>
    </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>

IMyService インターフェイスは次のように定義されています。

public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate = "/request", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
    void MyMehod(<Class Type> obj);
}

完全なエラー メッセージは次のとおりです。

「サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、「タイプ のオブジェクトのデシリアライズ中にエラーが発生しました。XML データの読み取り中に、文字列コンテンツの最大長クォータ (8192) を超えました。このクォータは、XML リーダーの作成時に使用される XmlDictionaryReaderQuotas オブジェクトの MaxStringContentLength プロパティを変更することで増やすことができます。詳細については、サーバー ログを参照してください。例外スタック トレースは次のとおりです。 Dispatcher.SingleBodyParameterMessageFormatter.

4

3 に答える 3

2

これは機能しますが、エンドポイント アドレスとして完全な絶対 URL があることを確認してください。狡猾になって相対パスを使用しようとしたり、.svc を省略したりすると、リクエストが大きくなりすぎると奇妙なリーダー クォータ エラーが発生します --

次のいずれかの理由で、これを WCF のバグとしてファイルします。

  1. 相対 URL は許可されません (そして、適切な例外がスローされます)。

また

  1. リーダー クォータは相対パスでも機能する必要があります
于 2010-02-15T20:45:13.337 に答える
1

web.config に挿入します。

<configuration>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindingConfig">
          <readerQuotas maxStringContentLength="2048000" />
        </binding>
      </webHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

属性 bindingConfiguration="webHttpBindingConfig" をエンドポイントに挿入します

于 2011-12-23T08:05:29.670 に答える