2012-03-26 5 views
2

Я пытаюсь отправить команду с NServiceBus 3.0. Все работает, когда я посылаю команду, которая реализует ICommand. Однако, если я использую соглашения, это не сработает. Источник ниже. Может ли кто-нибудь сказать мне, что я делаю неправильно?Тип ... не был зарегистрирован в serializer (не веб-приложение)

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 сразу после:

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

Это сделало его. Благодаря! –