Dans mon travail, je travaille avec une application développée en partie en C++ et en C#. Le code C++ est responsable de la gestion activeMQ (envoi, réception de message).ActiveMQ - désérialiser un message ActiveMQBytesMessage
J'ai développé une application pour surveiller les messages envoyés dans le sujet en m'abonnant avec mon application C#.
Ainsi, lorsqu'un message est envoyé à un sujet, mon application parvient à gérer le message, mais le message est sérialisé dans ActiveMQBytesMessage.
Comment désérialiser cet objet?
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.
}
}
Je viens de remarquer que hérite ActiveMQBytesMessage IBytesMessage de Apache.NMS d'espace de noms, mais je ne vois rien qui me permet de désérialiser le message.
J'utilise la dernière version de ActiveMQ avec NMS
[NB] L'objectif de mon application C# est de simplement surveiller ce qui se passe à l'intérieur d'un canal ActiveMQ. C'est pourquoi j'ai besoin de désérialiser l'ActiveMQBytesMessage afin que je puisse afficher le nom de l'objet et son contenu dans un gridview.
[Ajout d'informations]
Voici ce que j'ai essayé de désérialiser.
var memoryStream = new MemoryStream((message as ActiveMQBytesMessage).Content);
var binaryFormatter = new BinaryFormatter();
memoryStream.Position = 0;
var deserializedMessage = binaryFormatter.Deserialize(memoryStream);
Et je reçois cette erreur quand il désérialise:
Le flux d'entrée est un format binaire valide. Le contenu de départ (en octets) est: 00-00-00-00-00-00-4F-8C-00-00-00-00-00-00-00-00-54 ...
Vous devez fournir plus de contexte. Qu'est-ce que vous sérialiser et d'où? Naturellement, quelque chose envoyé à partir de C++ ne va pas simplement se désérialiser en un objet C#, ce qui est ce que votre question donne l'impression que vous essayez de faire. Une ventilation plus détaillée de votre problème vous aidera à obtenir une meilleure réponse. –
Salut Tim, l'objet sérialisé peut être n'importe quoi. Ce que j'ai vu jusqu'ici, c'est que la plupart du temps le C++ (géré) envoie un objet C# que je peux référencer dans mon projet pour le désérialiser. Y a-t-il autre chose que je puisse fournir pour clarifier le contexte?N'hésitez pas à me demander s'il vous plaît. – Gui
Avez-vous essayé 'var deserializedMessage = binaryFormatter.Deserialize (nouveau RemotingSurrogateSelector(), memoryStream);'? –