私が抱えている問題を次のコード例に減らしました。
var inQueue = ".\private$\testqueue";
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue(inQueue, QueueAccessMode.Send))
{
for (var i = 0; i < 100000; ++i)
{
var msg = new Message(i);
q.Send(msg, MessageQueueTransactionType.Automatic);
}
}
ts.Complete();
}
ご覧のとおり、TransactionScope パターンを使用して、(トランザクションのローカル) キューに 100,000 個の整数を書き込むだけです。私の理解では、このタイプの操作は DTC トランザクションにエスカレートしないということです。
ただし、実行中にコンポーネント サービスを開くと、[ローカル DTC] > [トランザクション リスト] にトランザクションが表示されます。これは、トランザクションがエスカレートされたことを意味しますよね?
なぜこれが起こるのでしょうか?私は別のプログラムのパフォーマンスの悪さからこれに駆り立てられましたが、そのような単純なトランザクションに DTC を使用したことが要因のようです。とにかく、原因を理解したいだけです。
どんな助けでも大歓迎です。