事务性与非事务性msmq

时间:2009-10-21 22:10:45

标签: msmq

我一直看到documentation说不可能发送到事务范围之外的远程事务性msmq队列。我发现这很难相信,因为我认为我已经做了好几周了。我有一个小应用程序,它将消息发布到事务性的远程队列。只是为了试验性能,客户端的各种版本都使用了TransactionScope来包装发送操作。最终,使用一些补偿事务逻辑似乎更聪明,更快,因此在客户端和服务器上使用TransactionScope都被删除了。问题是,消息似乎仍然显示在队列中,并且服务处理没有任何问题。

有人可以向我解释我在这里失踪的是什么吗?我只是厚吗?随意这么说(肯定不会是第一次)。

2 个答案:

答案 0 :(得分:4)

您使用TransactionScope引用的事务由dtc(分布式事务协调器)实现。 msmq(比如sql)有自己的内部事务引擎。消息中有一个属性,指出它是一个事务性消息。你可能在代码中的某处设置它。

答案 1 :(得分:1)

这取决于您使用的MSMQ版本。只有MSMQ 4.0及更高版本(Vista,7,Server 2008)才能进行远程事务读取。并且您正在使用TransactionScope,因为必须使用DTC。