メッセージの配信に MSMQ を既に使用している既存のシステム ランドスケープに #Rebus をプラグインしようとしています。
もちろん、その意図は Rebus にすべてを引き継がせることです ;-) が、現時点では、MSMQ トランスポートで既に動作している既存のコードを変更することはできません。
そこで、システムの新しい部分で Rebus を使用して、既存のアプリ キューにメッセージを送信できると思ったのですが、何かがうまくいかないのです。
Rebus を次のように構成します。
_bus = Configure.With(new WindsorContainerAdapter(container))
.Logging(l => l.ColoredConsole(LogLevel.Debug))
.Transport(t => t.UseMsmqInOneWayClientMode())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.Serialization(s => s.UseBinarySerializer())
.CreateBus().Start();
計画どおりにメッセージを送信しますが、既存のアプリがキューから読み取ろうとすると、例外がスローされます。
「引数として渡されたメッセージを逆シリアル化できません。シリアル化形式を認識できません。」
問題のメソッド呼び出しは次のとおりです。
// using System.Messaging.MessageQueue
receiveQueue.Receive(_queueTimeout, transaction);
コードを掘り下げると、Rebus の DefaultFilter が多かれ少なかれ私たちのものに似ていることがわかります
return new MessagePropertyFilter
{
Label = true,
ArrivedTime = true,
Extension = true,
Body = true,
Id = true,
};
MessagePropertyFilter は次のように構成されています。
var propertyFilter = new MessagePropertyFilter
{
Id = true,
Body = true,
Label = true
};
この微妙な変化が本当に例外の原因になるのでしょうか? また、BinaryFormatter を使用してメッセージをシリアル化します。
どんな助けでも大歓迎です:-)