Я видел несколько других сообщений здесь с той же проблемой, но никто не предлагает решения. И что странно, так это то, что это работает в dev, но не в prod.Невозможно де-сериализовать сообщение.Body при чтении из MSMQ
Я подаю сообщение в очередь следующим образом:
public void QueueMessage(LeadSubmissionMessage message)
{
using (var queue = new MessageQueue(MessageQueuePath))
{
queue.DefaultPropertiesToSend.Recoverable = true; // always send as recoverable
queue.Send(message);
}
}
Это класс LeadSubmissionMessage:
[Serializable]
public class LeadSubmissionMessage
{
public long LeadId { get; set; }
public long UserId { get; set; }
public DateTime DateTime { get; set; }
}
Это сообщение, в сыром тексте:
<?xml version="1.0"?>
<LeadSubmissionMessage xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<LeadId>194018</LeadId>
<UserId>300</UserId>
<DateTime>2016-05-17T14:52:30.1484784Z</DateTime>
</LeadSubmissionMessage>
Что все работает нормально. Но на приемном конце, и только в производстве, когда мы делаем это:
body = message.Body;
Он бросает эту ошибку:
System.InvalidOperationException: Cannot deserialize the message passed as an argument. Cannot recognize the serialization format.
at System.Messaging.XmlMessageFormatter.Read(Message message)
at System.Messaging.Message.get_Body()
Он работает найти в Dev и постановщики. Я пытаюсь свести к минимуму и устранить те моменты, когда все может быть по-другому, но у меня не хватало вещей, чтобы проверить. Все они работают с одной и той же версией сборки (выпуск). Любые связанные с MSMQ ключи конфигурации совпадают (за исключением очевидных имен и местоположений очереди). Одним из возможных вариантов является версия MSMQ, установленная на машине? Но я не уверен, как это проверить. Будет ли ОС иметь значение? Не могу себе это представить.
Я предполагаю, что тело является частью сообщения HTML. Таким образом, есть проблемы с html-частью сообщения. Могут быть проблемы с файлами cookie или прокси-сервера. Я бы начал с использования сниффера, как скрипач, чтобы увидеть, где происходит сбой передачи. Сравните хорошие результаты с плохими и проверьте заголовки HTTP на различия. – jdweng
Message.Body не является частью сообщения HTML. Это пример LeadSubmissionMessage. (Код класса в OP.) В этом случае Fiddler не поможет. –
Можете ли вы выделить, что это единственное сообщение в очереди? Кроме того, может ли быть какое-либо несоответствие между типом, как определено отправителем, и как определено получателем? –