私の仕事では、部分的に 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 が名前空間 Apache.NMS から IBytesMessage を継承していることに気付きましたが、メッセージを逆シリアル化するのに役立つものは何もありません。
NMS で最新バージョンの ActiveMQ を使用しています
[注] 私の 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 ... です。