2010-08-10 20 views
1

J'ai récemment migré vers l'utilisation du sérialiseur binaire pour envoyer des messages avec NServiceBus. Mes messages sont tous définis comme des interfaces et sont instancié à l'aideEnvoi d'interfaces en tant que message dans NServiceBus avec le sérialiseur binaire

bus.Send<MessageType>(msg => msg.Property = someValue) 

Cela conduit à une exception jetée de NServiceBus indiquant que

Impossible de créer une instance d'une interface

I peut voir à partir de la trace de la pile que SimpleMessageMapper est utilisé, et après avoir regardé dans la source peut voir qu'il fait un appel à Activator.CreateInstance.

Je ne trouve rien dans la documentation indiquant qu'il n'est pas possible de faire ce que j'essaie de faire, est-il un moyen de résoudre ce problème?

Merci, Matt

Répondre

0

je viens juste commencé à jouer avec nServiceBus, donc tout ce que je peux vous offrir est la théorie :).

Définissez-vous les classes d'implémentation pour vos interfaces de message ou nServiceBus génère-t-il des classes par lui-même? Dans le premier cas, assurez-vous que vous avez toujours un constructeur par défaut et que la classe et tous les champs/événements sont marqués comme [Serializable] ou [NonSerialized]. Dans ce dernier cas, il est possible que nServiceBus ne sache pas comment générer les membres qui peuvent être nécessaires pour la (dé) sérialisation. Vous devrez peut-être écrire et mapper la classe d'implémentation vous-même.

+0

Salut Mike, Cela semble possible, je suppose que NServiceBus créait des proxies en interne car je n'ai pas de classes d'implémentation pour les messages. Je trouve juste un peu étrange que cela fonctionne bien avec XmlSerializer, mais pas avec Binary. Merci, Matt – mattcole