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


> maxBytesPerRead属性

入力ストリームの一度のRead()で読み込むバイト数。Read()の引数に渡す配列のサイズ = 消費メモリ量に影響します。

> maxNameTableCharCount属性

XmlDictionaryReaderのNameTableに格納される名前文字列(XML要素名、属性名、名前空間URIなど)の最大長、あるいはname tableに格納される全文字列の最大バイト数(どちらなのかは、小さい値で調べればすぐ分かるかと)。

どちらもSystem.Xmlの設計に詳しくなれば、理解できると思います。

あ、ちなみに僕も「正解」を知っているわけではありませんよ。↑はあくまで推測です。

2007.02.06 16:19 URL | atsushieno #- [ 編集 ]


atsushienoさん初めまして!

有益な情報ありがとうございます
すぐには無理ですが、検証し次第、コメント欄にて報告したいと思います

2007.02.06 23:48 URL | よこけん #Ay6tTHf6 [ 編集 ]












トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/86-96bc10bc

[.NET][WCF]WCF で長い文字列を返す場合の注意点
UnitTest 用意してて良かった~ - お だ のスペース の続き… Web サービスから WCF に変更した際に、長い文字列を返す UnitTest で例外が発生してしまった。なので少し調べてみたら、次のサイトが引っ掛かった。 WCFで大きなデータを送受信するさいに注意する設定値(クオー

2009.07.01 22:11 | お だ のスペース