ami*_*t_g 7 .net msmq transactions
我在远程MSMQ中使用事务时收到错误"在指定的队列中找不到请求的消息".如果删除了事务或将队列移动到同一台机器,一切正常.队列在Windows 2008计算机上,客户端(如下所示)在Windows 7计算机上运行.
//Throws above error
using (MessageQueueTransaction mqTxn = new MessageQueueTransaction())
{
mqTxn.Begin();
Message message = messageQueue.ReceiveById(peekedMessage.Id, mqTxn);
mqTxn.Abort();
}
//Throws above error
using (TransactionScope txnScope = new TransactionScope())
{
Message message = messageQueue.ReceiveById(peekedMessage.Id, MessageQueueTransactionType.Automatic);
}
//Works fine
Message message = messageQueue.ReceiveById(peekedMessage.Id);
Run Code Online (Sandbox Code Playgroud)
PS peekedMessage是在这些调用之前偷看的消息.我已经验证了peekedMessage.Id与第一个队列项匹配.队列是事务性的.
MessageQueueTransaction只能用于内部事务,因此它不能在远程队列的情况下工作.
第二种方式(使用TransactionScope)可以使用DTC.DTC应该在两端运行并正确配置.默认情况下,在Windows 2008和Windows 7中都会关闭DTC.此外,如果启用了防火墙,则DTC将被放入例外列表中.一旦完成,它就像一个魅力.