gpt4 book ai didi

c# - 在事务中接收消息

转载 作者:行者123 更新时间:2023-11-30 21:55:15 27 4
gpt4 key购买 nike

我正在编写一个基本的 MSMQ 生产者和消费者,但在尝试接收消息作为事务的一部分时遇到了问题。

队列在 Windows Server 2003 机器上,并且明确设置为事务性。我的生产者能够毫无问题地将消息作为事务的一部分放入队列中。我也可以毫无问题地从队列中读取消息,只要我不在事务中这样做即可。我做错了什么?

这是我尝试使用队列的代码块:

using (MessageQueue msgQ = new MessageQueue(myQueueName))
{
try
{
using (MessageQueueTransaction msgTx = new MessageQueueTransaction())
{
msgTx.Begin();

msg = msgQ.Receive(new TimeSpan(0, 0, 0, 0, 1000), msgTx);
Console.WriteLine("Message " + msg.LookupId.ToString() + " received");
msg.Formatter = new XmlMessageFormatter(new string[] { "System.String,mscorlib" });
if (ParseMessage(msg.Body.ToString()))
{
msgTx.Commit();
Console.WriteLine("Message " + msg.LookupId.ToString() + " delivered");
}
else
{
msgTx.Abort();
Console.WriteLine("Message " + msg.LookupId.ToString() + " not delivered");
}
}
}
catch (MessageQueueException exc)
{
if (exc.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
Console.WriteLine("No more messages available");
else
Console.WriteLine("Unknown error encountered while receiving");
}
}

因此,如果我删除 using (MessageQueueTransaction ...) 封装,一切正常,当然除了我不能 commitabort 交易取决于 ParseMessage(...)

的 bool 结果

不过,当我添加事务位时,只要我点击 msgQ.Receive(...) 行,我就会得到一个 MessageQueueException。异常消息和基数为 null,MessageQueueErrorCode0xc00e008b,根据 this MSDN page翻译成:

MQ_ERROR_OPERATION_NOT_SUPPORTED_BY_REMOTE_COMPUTER (0xC00E008B)

Returned when an attempt is made to receive or peek at a message using a lookup identifier from a remote queue residing on a computer running MSMQ 1.0 or MSMQ 2.0.

现在,据我所知,我并没有尝试根据查找标识符接收或查看,此外,MSMQ 在 Windows Server 2003 上运行,这意味着无论如何它应该是 MSMQ 3.0。

我在这里弄错了什么?

最佳答案

您正在执行远程事务接收。这是在 MSMQ 4.0 中引入的。将服务器升级到受支持的操作系统。

How do I get transactional remote receives with MSMQ?

关于c# - 在事务中接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32441078/

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