我有一个简单的过程,它从一个队列中读取,处理消息,然后输出到另一个队列。我试图将此传输包装在 TransactionScope 中,以便从输入队列读取和写入输出队列都发生在同一个事务中。
但是,似乎正在使用 MSDTC 来执行此事务,因此它比使用标准 MessageQueueTransaction 慢得多。这应该发生吗?我的印象是 TransactionScope 只有在涉及范围时才会提升为外部事务,例如,读取消息队列和写入数据库,但如果只涉及多个消息队列则不会。
谢谢。
编辑:目前这一切都在我的笔记本电脑上,所以我确信不涉及其他机器。
我还想补充一点,我通过签入 Windows 的“组件服务”管理单元(即本地 DTC/事务列表)来确认正在发生升级的事务。我可以看到进入和离开这个屏幕的交易,我认为这意味着交易已经升级。我假设这个错了吗?
编辑2:当我只写一个队列时,我得到了同样的行为!IE
using (var ts = new TransactionScope())
{
using (var q = new MessageQueue("..."))
{
/* write data */
}
ts.Complete();
}
尽管队列在本地计算机上,但我可以看到 DTC 与上述一起使用。