1

I'm writing messages to a Message Queue in C# as follows:

ObjectMsg objMsg = new ObjMsg(1,"ascii",20090807);
Message m = new Message();
m.Formatter = new BinaryMessageFormatter();
m.body = objMsg;
queue.Send(m);

and I'm trying to read the messages as follows:

Message m = new Message()
m.Formatter = new BinaryMessageFormatter();
MessageQueue mq = new MessageQueue("./pqueue");

m = mq.Recieve();
ObjMsg msg = (ObjMsg )m.Body;

However I'm getting an error message which says: "Cannot find a formatter capable of reading this message."

Ganesha87
  • 41
  • 3

2 Answers2

1

try reading the bodystream of the message like this:

Message m = new Message()
m.Formatter = new BinaryMessageFormatter();
MessageQueue mq = new MessageQueue("./pqueue");

m = mq.Recieve();
StreamReader sr = new StreamReader(m.BodyStream);
string messageBody = "";
while (sr.Peek() >= 0) 
{
    messageBody += sr.ReadLine();
}
M4N
  • 94,805
  • 45
  • 217
  • 260
felbus
  • 2,639
  • 2
  • 24
  • 30
0

You can also call StreamReader.ReadToEnd() once instead of continually appending to a string. This is generally faster in my experience.

System.Messaging.Message[] messages = messageQueue.GetAllMessages();

foreach (System.Messaging.Message message in messages)
{
    System.IO.StreamReader sr = new System.IO.StreamReader(message.BodyStream);
    Console.WriteLine(sr.ReadToEnd());
}
Morten Jensen
  • 5,818
  • 3
  • 43
  • 55