2012-03-26 114 views
2

我正在尝试使用NServiceBus 3.0发送命令。当我发送一个实现ICommand的命令时,一切正常。但是,如果我使用这些约定,它将不起作用。来源如下。有人能告诉我我做错了什么吗?类型...未在序列化程序(非网络应用程序)中注册

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

的命令如下:

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

回答

4

不幸的是, NSB依赖的配置方法排序。如果你将DefiningCommandsAs方法移动到With后面,它将起作用:

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

这样做。谢谢! – 2012-03-27 14:25:15