2012-03-26 7 views
2

Ich versuche, einen Befehl mit NServiceBus 3.0 zu senden. Alles funktioniert, wenn ich einen Befehl sende, der ICommand implementiert. Es funktioniert jedoch nicht, wenn ich die Konventionen verwende. Die Quelle ist unten. Kann mir jemand sagen, was ich falsch mache?Typ ... wurde nicht im Serializer (nicht Web-App) registriert

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(); 
    } 
} 

Der Befehl sieht wie folgt aus:

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

Antwort

4

Leider NSB ist abhängig von der Reihenfolge der Konfigurationsmethoden. Es funktioniert, wenn Sie die Methode "DefiningCommandsAs" nach rechts verschieben. With:

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

Das war es. Vielen Dank! –

Verwandte Themen