Message.Body - Невозможно десериализовать сообщение, переданное в качестве аргумента.Не удается распознать формат сериализации - PullRequest
1 голос
/ 19 января 2011

При создании новой «транзакционной» очереди мне сначала нужно выяснить, существует ли какая-либо «нетранзакционная» MessageQueue с тем же именем или нет. Если это так, мне нужно скопировать сообщения из старой очереди в новую транзакционную очередь.

Для этого (когда я нахожу старую очередь с тем же именем): 1. Я создаю временную очередь (которую я нашел созданной по умолчанию как Transactional). 2. Я перебираю сообщения из старой очереди и отправляю их в новую очередь. 3. Удаление старой очереди 4. Создание новой транзакционной очереди. 5. перебирая сообщения из временной транзакционной очереди и отправляя их в новую очередь. 6. Удаление временной очереди

Сообщения отправляются из старой очереди в новую очередь без каких-либо исключений. Однако, когда я пытаюсь прочитать тело сообщения как message.Body

Body = 'message.Body' бросил исключение типа 'System.InvalidOperationException' Невозможно десериализовать переданное сообщение в качестве аргумента. Не могу распознать формат сериализации

Как я могу выполнить указанное требование и что может пойти не так в моем подходе?

Я новичок в MSMQ. (С использованием Windows XP, Visual Studio 2008, .NET 2.0)

1 Ответ

2 голосов
/ 25 января 2011

Вы не «просматриваете сообщения из старой очереди и отправляете их в новую очередь». Вместо этого вы создаете новые сообщения, используя данные из старых сообщений.

Так что, если вы начнете с «хорошего» сообщения, это не значит, что вы получите то же самое. Важной информацией является то, что:

  1. Какой код был использован для создания исходного сообщения
  2. Какой код используется для создания нового сообщения во временной очереди
  3. Какой код используется для создания нового сообщения в конечной очереди
  4. Какой код используется для чтения сообщения из конечной очереди

Я ожидаю, что сообщения восстанавливаются не одинаково, или процесс приема не читает их правильно. То есть, какой форматер сообщений вы использовали? ActiveX, например?

Приветствия
Джон Брейквелл

...