pour le paramètre de contexte, j'échange des messages entre mon client nServiceBus et le serveur nSerivceBus. c'est l'espace de noms xyz.Messages et et une classe, Message: IMessageProblème de sérialisation Nservicebus des types dérivés
J'ai plus de messages qui sont dans les autres dll, comme xyz.Messages.Domain1, xyz.Messages.Domain2, xyz.Messages.Domain3. et les messages qui dérivent de ce message de base, Message.
Je les points de terminaison définis comme comme:
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>
au serveur
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="xyz.Messages" Endpoint="xyzClientQueue" />
<add Messages="xyz.Messages.Domain1" Endpoint="xyzClientQueue" />
<add Messages="xyz.Messages.Domain2" Endpoint="xyzClientQueue" />
</MessageEndpointMappings>
</UnicastBusConfig>
et le bus initialisées
IBus serviceBus = Configure.With()
.SpringBuilder()
.XmlSerializer()
.MsmqTransport()
.UnicastBus()
.LoadMessageHandlers()
.CreateBus()
.Start();
maintenant lorsque je tente d'envoyer par exemple de type de message ou tout type de type dérivé de Message, il envoie avec succès le message et au serveur, je reçois le pro par type.
par ex.
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
Mon problème se pose lorsque tout type, par exemple MessageDerived1, contient une variable membre de type message, et quand je l'attribuer à un type dérivé, le type est correctement transféré sur le fil. Il ne transfère que le type de message, pas le type dérivé.
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)
toute aide est fortement appréciée.
Merci TJ