消息队列错误:找不到能够读取消息的格式化程序

mac*_*ojw 28 c# message-queue

我正在使用C#将消息写入消息队列,如下所示:

queue.Send(new Message("message"));
Run Code Online (Sandbox Code Playgroud)

我正在尝试阅读如下消息:

Messages messages = queue.GetAllMessages();
foreach(Message m in messages)
{
  String message = m.Body;
  //do something with string
}
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息,上面写着:"找不到能够读取此消息的格式化程序."

我究竟做错了什么?

mac*_*ojw 36

我通过在每条消息中添加格式化程序来解决问题.将格式化程序添加到队列不起作用.

Messages messages = queue.GetAllMessages();
foreach(Message m in messages)
{
  m.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" });
  String message = m.Body;

  //do something with string
}
Run Code Online (Sandbox Code Playgroud)


pri*_*e23 25

或者你可以使用

 message.Formatter =
     new System.Messaging.XmlMessageFormatter(new Type[1] { typeof(string) });
Run Code Online (Sandbox Code Playgroud)

  • 我认为这比接受的答案更可取.与将完整类型名称指定为字符串相比,它更"强大". (2认同)

fel*_*bus 6

您可以尝试阅读消息的正文流而不是正文,如下所示:

StreamReader sr = new StreamReader(m.BodyStream);    
string messageBody = "";    
while (sr.Peek() >= 0) 
{
    messageBody += sr.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)