2010-12-10 7 views
1

SAPからXMLフィードを受け取り、数万(またはそれ以上)のレコードが処理されるWCFサービス(IIS 6.0でホストされている)があります。WCFサービスの最大パラメータサイズ

[OperationContract] 
[FaultContractAttribute(typeof (ArgumentException))] 
void ProcessSapRoles(XElement SapData); 

私はパラメータサイズの制限について懸念しています。その他のSOの記事から、私はをhttpRuntimeに設定してweb.configでこれを助けることを読んでいます(私はsend timeoutを増やす必要があると確信しています)。また、NetTcpBindingを使用すると、これを使用する際の制限や設定方法がわからなくても役に立ちます。

発信者にレコードごとに100,000回のコールを発信させることができますが、パフォーマンスの影響は重大であると思います。また、反対側では、既存のレコードを照会して、レコードを更新または追加しているかどうかを確認し、更新をデータベースに送り返す必要があります。 1レコードにつき100,000件の個別のクエリに対して100,000個のデータセットを作成することは、同様に窮地に見えます。

Pre-WCFでは、リモーティングチェーンで圧縮シンクを使用しましたが、が大幅に改善されました(最大のデータセットを送信すると、20分後にWebページのタイムアウトが発生しました;圧縮シンクを追加した後、データセットは、約20秒で)(そして、顧客は大きなデータセットを作る責任がありました。私たちはそれらを制御できませんでした:P)。

潜在的に100,000レコードを渡すのをどのように処理するのが最善で、WCFの圧縮シンクと同等のコンセプトはありますか?

TIA!
James

+0

NetTcpBindingのアプローチをもっと見る...次の数日で回答を選択します –

答えて

1

WCFサービスは、デフォルトでパラメータサイズで64KBに制限されています。これは正当な理由です - サービスは、そのサイズのバッファ(または同時に複数のバッファ、同時発信者のために潜在的に)を持たなければならず、そのサイズが大きすぎると、巨大な要求を偽って簡単にサーバにあふれさせる可能性があります。それをひざまずいてください。どんなに多くのRAMを持っていても、ある時点で、それは使い果たされます。

しかし、良いことは次のようなことです。すべてのことがきわめて簡単に設定できます。企業のLAN環境(ファイアウォールの背後)で大きなメッセージサイズと高度に最適化されたNetTcpBindingを組み合わせると、どちらのサイズでも安全になり、クライアントとサービスの間でほぼすべてのサイズのドキュメントを送信できるはずです。

+0

偽の要求についての良い点! –

1

大量データの転送にはStreaming in WCFを使用したことがありますか?

補足として、NetTcpは絶対にお手伝いします。その理由は、デフォルトでBinary encodingを使用しているためです。一方、HttpではデフォルトでText encodingが使用されており、余分なスペースが必要です。

+0

XMLデータを渡しているので、バイナリエンコーディングのメリットがありますか?ストリーミングを見て... –