gpt4 book ai didi

c# - MSMQ队列中第一个Message.Body是OK的,后面队列中的Message.Body都是空的

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:09 28 4
gpt4 key购买 nike

我向本地计算机上的 MSMQ 队列发送了一些相同的(显然除了 Id# 之外)消息。消息的主体是一个序列化的 XElement 对象。

当我尝试处理队列中的第一条消息时,我能够成功反序列化 Message.Body 对象并将其保存到文件中。但是,当尝试处理下一条(或任何后续的)消息时,Message.Body 不存在,并抛出异常。我已经验证消息 ID 对于试图处理的消息是正确的。

被序列化的 XML 格式正确。

有什么想法吗?我的代码基于此处的 Microsoft MSMQ 图书订购示例:http://msdn.microsoft.com/en-us/library/ms180970%28VS.80%29.aspx

// Create Envelope XML object
XElement envelope = new XElement( env + "Envelope"
, new XAttribute( XNamespace.Xmlns + "env"
, env.NamespaceName )
<snip>

//Send envelope as message body
MessageQueue myQueue = new MessageQueue(
String.Format(@"FORMATNAME:DIRECT=OS:localhost\private$\mqsample")
);

myQueue.DefaultPropertiesToSend.Recoverable = true;

// Prepare message
Message myMessage = new Message();
myMessage.ResponseQueue = new MessageQueue(
String.Format(System.Globalization.CultureInfo.InvariantCulture,
@"FORMATNAME:DIRECT=TCP:192.168.1.217\private$\mqdemoAck")
);

myMessage.Body = envelope;

// Send the message into the queue.
myQueue.Send(myMessage,"message label");

//Retrieve messages from queue
System.Messaging.Message message = mqOrderQueue.Receive();

我在第一次检索时看到的 Message.Body 值符合预期:<?xml version="1.0" encoding="utf-8"?>
<string>Some String</string>
但是,第二次和后续检索操作 Message.Body 是:“无法反序列化作为参数传递的消息。无法识别序列化格式。”

这是如何第一次工作正常但之后就不行了?我在检索后尝试了 message.Dispose() 但没有帮助。

非常感谢您对此提供的任何帮助!

最佳答案

如果您收到第一条消息,然后加载管理控制台以查看队列,并且您可以在这些消息的属性对话框中看到正文,那么这可能表明您实际上从未为它们保留正文。也许吧?

我在 MSMQ 上按 ID 接收时从未遇到过任何问题,尽管我知道在分布式事务下的某些高负载场景中,它确实有一两个错误会导致线程卡住等待。

然后再次通过 ID 接收有点打败了队列点,所以我从来没有用过那么多 :D

关于c# - MSMQ队列中第一个Message.Body是OK的,后面队列中的Message.Body都是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2836487/

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