2012-03-26 1 views
2

J'essaie d'envoyer une commande avec NServiceBus 3.0. Tout fonctionne quand j'envoie une commande qui implémente ICommand. Cependant, cela ne fonctionne pas si j'utilise les conventions. La source est ci-dessous. Quelqu'un peut-il me dire ce que je fais mal?Type ... n'a pas été enregistré dans le sérialiseur (application non Web)

public class Program 
{ 
    public static NServiceBus.IBus Bus { get; private set; } 

    static void Main(string[] args) 
    { 
     ConfigureBus(); 

     var command = new RouteTradeCommand() { TradeXml = "<trade />" }; 
     Bus.Send("[email protected]", command); 
    } 

    private static void ConfigureBus() 
    { 
     Bus = Configure.With() 
      .DefaultBuilder() 
      .XmlSerializer() 
      .MsmqTransport() 
      .UnicastBus() 
      .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Messages")) 
      .SendOnly(); 
    } 
} 

La commande ressemble à ceci:

namespace Messages 
{ 
    public class RouteTradeCommand : IRouteTradeCommand 
    { 
     public string TradeXml { get; set; } 
    } 
} 

Répondre

4

Malheureusement, NSB dépend de l'ordre des méthodes de configuration. Cela fonctionnera si vous déplacez la méthode DefiningCommandsAs juste après Avec:

NServiceBus.Configure.WithWeb() 
.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith(".Commands")) 
.Log4Net() 
.DefaultBuilder() 
.XmlSerializer() 
.MsmqTransport() 
.DefineEndpointName("Web") 
.UnicastBus() 
.SendOnly(); 
+0

Cela fait. Merci! –

Questions connexes