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