4

データ コントラクトの一部としてバイト配列を受け入れる WCF サービス操作があります。このサービスは (インターネットではなく) 内部でのみ公開されており、クォータを増やして 10 MB のバイト配列を許可したいと考えています。

このサービスは IIS7 でホストされています。デフォルトの長さを超えるバイト配列を送信しようとすると、次の例外メッセージが表示されます。

タイプ MyService.ServiceContracts.Data のオブジェクトの逆シリアル化でエラーが発生しました。XML データの読み取り中に、最大配列長のクォータ (16384) を超えました。このクォータは、XML リーダーの作成時に使用される XmlDictionaryReaderQuotas オブジェクトの MaxArrayLength プロパティを変更することで増やすことができます。行 1、位置 22991。

構成は次のとおりです。

<system.serviceModel>
    <netTcpBinding>
        <binding name="largeBinaryBinding" maxReceivedMessageSize="10001000" 
                 maxBufferPoolSize="80008000" maxBufferSize="10001000"
                 receiveTimeout="00:01:00" openTimeout="00:01:00" 
                 closeTimeout="00:01:00" sendTimeout="00:01:00">
            <readerQuotas maxArrayLength="10000000" />
        </binding>
    </netTcpBinding>

    <services>
        <service name="MyService">
            <endpoint binding="netTcpBinding"
                      bindingConfiguration="largeBinaryBinding"
                      bindingNamespace="http://my.services.co.uk/MyService"
                      contract="Services.MyService.ServiceContracts.IMyService" />
        </service>
    </services>
</system.serviceModel>

したがって、私の構成ではより大きなメッセージを許可していますが、IIS はこれを無視しているようです。これを停止して大きなメッセージを通過させるにはどうすればよいですか?

4

1 に答える 1

9

繰り返しますが、質問を投稿した直後に答えを見つけました!

WAS を使用する場合、構成のサービス名でサービスの完全なクラス名を指定する必要があります。したがって、私の例では、サービス実装クラスをMyService名前空間に と呼びましたServices。したがって、構成では、必要です

<service name="Services.MyService">
   ...

そうしないと、IIS は慎重に作成された構成を黙って無視します! なんて都合のいい。

于 2011-11-23T14:58:32.473 に答える