2009-10-21 151 views
4

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

有人可以向我解释我在这里失踪的是什么?我刚刚变厚了吗?随意这么说(这当然不会是第一次)。

回答

4

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

1

这取决于您使用的是哪个版本的MSMQ。只有MSMQ 4.0及更高版本(Vista,7,Server 2008)可以执行远程事务读取。而且您正确使用TransactionScope,因为必须使用DTC。