类型...未在序列化程序中注册(非Web应用程序)

时间:2012-03-26 09:25:41

标签: nservicebus nservicebus3

我正在尝试使用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("BrokerQueue@DATPCDI041", 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; }
    }   
}

1 个答案:

答案 0 :(得分:4)

不幸的是, NSB依赖于配置方法的顺序。如果你将DefiningCommandsAs方法移到With:

之后,它就会起作用
NServiceBus.Configure.WithWeb()
.DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith(".Commands"))
.Log4Net()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.DefineEndpointName("Web")
.UnicastBus()
.SendOnly();