gpt4 book ai didi

.net - 远程 MSMQ、事务和 ReceiveById 失败 - "Message requested was not found in the queue specified"

转载 作者:行者123 更新时间:2023-12-04 11:44:24 37 4
gpt4 key购买 nike

在远程 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);

附言peekedMessage 是在这些调用之前偷看的消息。我已经验证了 peekedMessage.Id 与第一个队列项匹配。队列是事务性的。

最佳答案

MessageQueueTransaction 只能用于内部事务,因此它在远程队列情况下不起作用。

第二种方式(使用 TransactionScope)会在使用 DTC 时起作用。 DTC 应该在两端运行并正确配置。默认情况下,DTC 在 Windows 2008 和 Windows 7 中都是关闭的。另外,如果防火墙打开,则将 DTC 放入异常(exception)列表中。一旦完成,它就像一个魅力。

关于.net - 远程 MSMQ、事务和 ReceiveById 失败 - "Message requested was not found in the queue specified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4383378/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com