尝试从消息访问正文时出现无效操作异常

本文关键字:无效 操作 异常 正文 消息 访问 | 更新日期: 2023-09-27 18:34:31

我尝试访问 Windows 消息队列的消息:

var activeQueue = new MessageQueue("''myhost''private$''just.a.queue", QueueAccessMode.Receive);
foreach(message in _activeQueue.GetAllMessages().ToList()) {
   Console.WriteLine(message.Body);
}

我在尝试访问message.Body时收到 InvalidOperationException(以及除 Id - 字段以外的几乎所有其他属性(。

尝试从消息访问正文时出现无效操作异常

多亏了

@Soner Gönül,我才能够解决我的问题。这是解决方案:

message.Formatter = new ActiveXMessageFormatter();
var reader = new StreamReader(message.BodyStream);
var msgBody = reader.ReadToEnd();
Console.WriteLine(msgBody)

附带说明一下,使用格式化程序解码消息有两种可能性:

Queue.Formatter = new MessageFormatter(); // Set formatter on queue
Msg = Queue.Receive();
Body = Msg.Body;

Msg = Queue.Receive();
Msg.Formatter = new MessageFormatter(); // Set formatter on msg
Body = Msg.Body;

也可以组合:

Queue.Formatter = new MessageFormatter();
Msg = Queue.Receive();
if(Msg.Label.Contains('Other')) Msg.Formatter = new OtherMessageFormatter();
Body = Msg.Body;

但以下操作将失败:

Msg = Queue.Receive();
Queue.Formatter = new MessageFormatter();
因为当队列收到消息时,消息的格式化程序

将初始化为队列的当前格式化程序,因此如果队列的格式化程序仅在收到第一条消息后设置,则它不起作用。