2012-03-26 82 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