По своей работе я работаю с приложением, частично разработанным на C++ и C#. Код C++ отвечает за управление ActiveMQ (отправка, получение сообщения).
Я разработал приложение для мониторинга сообщений, отправленных в тему, подписавшись на свое приложение C #.
Поэтому, когда сообщение отправляется в тему, моему приложению удается обработать сообщение, но сообщение сериализуется в ActiveMQBytesMessage.
Как я могу десериализовать этот объект?
public void OnMessage(IMessage message)
{
if (message != null)
{
var content = (message as ActiveMQBytesMessage).Content; // This is a byte[], I tried to deserialize using BinaryFormatter but it throws an exception, I can't write it here because I'm at home.
}
}
Я только что заметил, что ActiveMQBytesMessage наследует IBytesMessage из пространства имен Apache.NMS, но я не вижу ничего, что помогло бы мне десериализовать сообщение.
Я использую последнюю версию ActiveMQ с NMS
[NB] Цель моего приложения C# — просто отслеживать, что происходит внутри канала ActiveMQ. Вот почему мне нужно десериализовать ActiveMQBytesMessage, чтобы я мог отображать имя объекта и его содержимое в представлении сетки.
[Добавлена дополнительная информация]
Вот что я пытался десериализовать.
var memoryStream = new MemoryStream((message as ActiveMQBytesMessage).Content);
var binaryFormatter = new BinaryFormatter();
memoryStream.Position = 0;
var deserializedMessage = binaryFormatter.Deserialize(memoryStream);
И я получаю эту ошибку при десериализации:
Входной поток не является допустимым двоичным форматом. Начальное содержимое (в байтах): 00-00-00-00-00-00-4F-8C-00-00-00-09-00-00-00-00-54...
var deserializedMessage = binaryFormatter.Deserialize(new RemotingSurrogateSelector(), memoryStream);
? - person david.s   schedule 14.05.2012