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

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

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;

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

Ответы [ 2 ]

1 голос
/ 15 февраля 2011

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

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();
}
0 голосов
/ 08 июля 2015

Вы также можете вызвать 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());
}
...