あるキューから読み取り、メッセージを処理し、別のキューに出力する単純なプロセスがあります。この転送をTransactionScope内でラップしようとしています。これにより、入力キューからの読み取りと出力キューへの書き込みの両方が同じトランザクション内で発生します。
ただし、このトランザクションの実行にはMSDTCが使用されているように見えるため、標準のMessageQueueTransactionを使用するよりも大幅に遅くなります。これが起こっているべきですか?TransactionScopeは、たとえばメッセージキューの読み取りやデータベースの書き込みなどのスコープが関係している場合にのみ外部トランザクションに昇格し、複数のメッセージキューが関係している場合は昇格しないという印象を受けました。
ありがとう。
編集:これは現在私のラップトップにすべてあるので、他のマシンは関与していないと確信しています。
また、Windowsの「コンポーネントサービス」スナップイン(つまり、ローカルDTC /トランザクションリスト)をチェックインして、エスカレーションされたトランザクションが発生していることを確認していることを付け加えたいと思います。この画面に出入りするトランザクションを確認できます。これは、トランザクションがエスカレートされたことを意味すると思います。私はこれを仮定するのは間違っていますか?
編集2:単一のキューに書き込んでいるときと同じ動作が発生します!すなわち
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}
ts.Complete();
}
キューがローカルマシン上にあるにもかかわらず、DTCが上記で使用されていることがわかります。