Я отправляю несколько идентичных (кроме Id #, очевидно) сообщений в очередь MSMQ на моей локальной машине. Тело сообщений является сериализованным объектом XElement.
Когда я пытаюсь обработать первое сообщение в очереди, я могу успешно десериализовать объект Message.Body и сохранить его в файл. Однако при попытке обработать следующее (или любое последующее) сообщение Message.Body отсутствует, и выдается исключение. Я подтвердил, что идентификаторы сообщений верны для сообщения, которое пытается быть обработанным.
Сериализуемый XML сформирован правильно.
Есть идеи? Я основываю свой код на примере заказа книги Microsoft MSMQ, найденном здесь: http://msdn.microsoft.com/en-us/library/ms180970%28VS.80%29.aspx
// Create Envelope XML object
XElement envelope = new XElement( env + "Envelope"
, new XAttribute( XNamespace.Xmlns + "env"
, env.NamespaceName )
<snip>
//Send envelope as message body
MessageQueue myQueue = new MessageQueue(
String.Format(@"FORMATNAME:DIRECT=OS:localhost\private$\mqsample")
);
myQueue.DefaultPropertiesToSend.Recoverable = true;
// Prepare message
Message myMessage = new Message();
myMessage.ResponseQueue = new MessageQueue(
String.Format(System.Globalization.CultureInfo.InvariantCulture,
@"FORMATNAME:DIRECT=TCP:192.168.1.217\private$\mqdemoAck")
);
myMessage.Body = envelope;
// Send the message into the queue.
myQueue.Send(myMessage,"message label");
//Retrieve messages from queue
System.Messaging.Message message = mqOrderQueue.Receive();
Значение Message.Body, которое я вижу при первом получении, соответствует ожидаемому: <?xml version="1.0" encoding="utf-8"?>
<string>Some String</string>
Тем не менее, вторая и последующие операции получения Message.Body: «Невозможно десериализовать сообщение, переданное в качестве аргумента. Не удается распознать формат сериализации. «
Как это работает нормально в первый раз, но не после этого? Я пробовал message.Dispose () после его получения, но это не помогло.
Большое спасибо за любую помощь в этом!