для настройки контекста, я обмениваюсь сообщениями между моим клиентом nServiceBus и сервером nSerivceBus. это пространство имен xyz.Messages и класс, Сообщение: IMessageПроблема сериализации Nservicebus производных типов
У меня есть больше сообщений, которые находятся в других dll, например xyz.Messages.Domain1, xyz.Messages.Domain2, xyz.Messages.Domain3. и сообщения, которые формируют это базовое сообщение, Message.
У меня есть конечные точки, определенные как, как:
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, он успешно отправляет сообщение поверх и на сервере, я получаю pro по типу.
например.
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