C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/01/29 00:54
WCFでは、通信データの制限を設定できます。

[ データ量の制限 ]
WCFで用意されている各バインディングセットには、コンフィギュレーション用のセクションが用意されています。以下は代表的なバインディングセットのコンフィギュレーションセクションです。

これらのセクションのmaxReceivedMessageSize属性にて、通信データ量の制限値をバイト単位で設定できます。既定値は65536 ( 0x10000 ) バイトとなります。

また、WCFによるWebサービスでは、 [system.web] - [ httpRuntime ] セクションのmaxRequestLength属性でも通信データ量が制限されることに注意します。この属性値の単位はキロバイトで、既定値は4096 ( 0x1000 ) キロバイトとなります。
つまり、maxReceivedMessageSize属性に4194304以上の値を設定する場合、このmaxRequestLength属性も適切な値に変更する必要があります。
この属性はWCF用の属性ではなく、WCF以外のWebサービスでも有効な属性です。 ( 参考:大量データに対する戦略 )


[ 詳細な制限 ]
各バインディング用セクションの子要素である [ readerQuotas ] セクションの各属性にて、通信データの詳細な制限が設定できます。

maxArrayLength属性
SOAPメッセージで扱う配列型のデータの長さ ( 配列の要素数 ) を制限します。
既定値:16384 ( 0x4000 )

maxBytesPerRead属性
不明・・・。 ( 恐らく操作結果メッセージのサイズ制限。 )
既定値:4096 ( 0x1000 ) バイト

maxDepth属性
SOAPメッセージの、XMLノードの入れ子の深さを制限します。
既定値:32 ( 0x20 ) レベル

maxNameTableCharCount属性
不明・・・。
既定値:16384 ( 0x4000 )

maxStringContentLength属性
SOAPメッセージで扱うString型のデータの長さ ( 文字数 ) を制限します。
既定値:8192 ( 0x2000 ) 文字


[ 設定例 ]
引数でバイナリデータ ( Byte型の配列 ) を受け取る、WsHttpBindingを適用したWCF Webサービスにて、バイナリデータのサイズ制限を10MBとする場合 ( 通信データのサイズ制限は10.5MBとする ) のWeb.config設定例を以下に示します。

<system.serviceModel>
    <services>
        <service name="Service1">
            <endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpBinding_IService1" contract="IService1" />
        </service>
    </services>
    <bindings>
        <wsHttpBinding>
            <binding name="wsHttpBinding_IService1" messageEncoding="Mtom" maxReceivedMessageSize="11010048">
                <readerQuatas maxArrayLength="10485760" />
            </binding>
        </wsHttpBinding>
    </bindings>
</system.serviceModel>
<system.web>
    <httpRuntime maxRequestLength="10752" />
</system.web>
タグ: .NET C# WCF