2012-04-26 12 views
0

WCFとマルチスレッドに関するいくつかの質問があります。 スレッドプールにアイテムを配置し、MSMQキューからのメッセージを処理する予定です。 私もWASでWCFを開催します。TransX WCFとマルチスレッド

この時点でスレッドがどのように機能するのか不思議です。たとえば、WCFのMSMQキューへのバインドによってメッセージが取得され、WASが必要なときにサービスを起動することがわかります。しかし、処理するメッセージが100件あるとします(たとえば、1秒あたり100メッセージ)。これは、スレッド形式または単一スレッド形式で配信されますか?

スレッド化された方法でトランザクションをコミットまたはアボートするにはどうすればよいですか?特別な考慮事項?

申し訳ありませんが、これを明確にする必要があります。

答えて

1

「スレッドプールにアイテムを置く」がWCF側に何を置くか明確ではないが、netMsmqBindingを使用するサービスは他のWCFバインディングと同様に「呼び出し」を処理する。違いは、「呼び出し」は実際にはキュー内のMSMQメッセージであることです。

このarticle on netMsmqBindingは、バインディングがどのように機能するかを明確に説明しています。既定のInstanceContext設定(.NETバージョンに応じて、呼び出しごとまたはセッションごとに)でWCFサービスを構成すると、サービスインスタンスは、標準呼び出しの場合と同様に、キューからメッセージを取得します。 MSMQとWCFには、この動作に影響を及ぼしてメッセージを順次処理させる設定がありますが、これはデフォルトではありません。

サービスごとに(またはセッションごとに)サービスセットを残して、WCFがマルチスレッドを処理するようにします。トランザクションについては、コードをthis sample in MSDNに見て、それらを操作する方法を参照してください。

+0

PerCallのアプローチを使用した疑いがありました。私はnetMSMQBindingを使用するつもりはないが、統合バインディング。これは行動を変えるでしょうか? –

+1

私はInstanceContext設定が、他のバインディングに適用されるのと同じ方法でmsmqIntegrationBinding用に構成されたWCFサービスに適用されることを確信しています。 msmqIntegrationBindingとnetMsmqBindingの違いは、msmqIntegrationBinding構成では、操作のパラメーターが標準の.NETタイプではなく厳密に型指定されたMsmqMessageインスタンスであることです。 –

+0

ありがとうございます。私はそれほど大丈夫だとは思いましたが、確信はありませんここで結論は本当にPerCallを使用することです?トランザクションについては、サービスへの各リクエスト(各リクエストはWCFサービスを呼び出す1つのメッセージ)を呼び出すかのように心配する必要はありません。私はすべてのAFAIKでPerSessionを使用しません。それは "WCF - ここにMSMQメッセージです"の問題です。 - それからサービスはそれを受け取り、私が望むmsgを処理しますが、私はそれを2つの他のアウトバウンドキューの1つに置きます。 –

関連する問題