コンテキスト設定については、nServiceBusクライアントとnSerivceBusサーバーの間でメッセージを交換しています。それは名前空間xyz.Messagesであり、クラスはMessage:IMessageです。
xyz.Messages.Domain1、xyz.Messages.Domain2、xyz.Messages.Domain3など、他のdllにあるメッセージが他にもあります。そして、その基本メッセージであるメッセージから派生するメッセージ。
エンドポイントは次のように定義されています:
at client
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="xyz.Messages" Endpoint="xyzServerQueue" />
<add Messages="xyz.Messages.Domain1" Endpoint="xyzServerQueue" />
<add Messages="xyz.Messages.Domain2" Endpoint="xyzServerQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
サーバーで
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="xyz.Messages" Endpoint="xyzClientQueue" />
<add Messages="xyz.Messages.Domain1" Endpoint="xyzClientQueue" />
<add Messages="xyz.Messages.Domain2" Endpoint="xyzClientQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
バスは次のように初期化されます
IBus serviceBus = Configure.With()
.SpringBuilder()
.XmlSerializer()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();
メッセージタイプまたは任意のタイプの派生タイプのメッセージを送信しようとすると、サーバー上およびサーバーでメッセージが正常に送信され、適切なタイプが取得されます。
例えば。
Message message= new Message();
Bus.Send(message); // works fine, transfers Message type
message = new MessageDerived1();
Bus.Send(message); // works fine, transfers MessageDerived1 type
message = new MessageDerived2();
Bus.Send(message); // works fine, transfers MessageDerived2 type
私の問題は、MessageDerived1などのタイプにMessageタイプのメンバー変数が含まれていて、それを派生タイプに割り当てると、そのタイプがネットワーク上で適切に転送されない場合に発生します。派生タイプではなく、メッセージタイプとしてのみ転送されます。
public class MessageDerived2 : Message
{
public Message message;
}
MessageDerived2 messageDerived2= new MessageDerived2();
messageDerived2.message = new MessageDerived1();
message = messageDerived2;
Bus.Send(message); // incorrect behaviour, transfers MessageDerived2 correctly, but looses type of MessageDerived2.Message (it deserializes as Message type, instead of MessageDerived1)
どんな助けでも強く感謝します。
ありがとうTJ