Не удается найти подходящий модуль форматирования для объекта пользовательского класса

Я пишу сообщения в очередь сообщений на С# следующим образом:

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

и я пытаюсь прочитать сообщения следующим образом:

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

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

Однако я получаю сообщение об ошибке, в котором говорится: «Не удается найти средство форматирования, способное прочитать это сообщение».


person Ganesha87    schedule 13.04.2010    source источник
comment
Буду признателен за обратную связь по моему ответу.   -  person Filburt    schedule 23.04.2010


Ответы (2)


попробуйте прочитать основной поток сообщения следующим образом:

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();
}
person felbus    schedule 15.02.2011

Вы также можете вызвать StreamReader.ReadToEnd() один раз вместо того, чтобы постоянно добавлять к строке. Как правило, это быстрее по моему опыту.

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());
}
person Morten Jensen    schedule 08.07.2015