Nservicebus 传奇故事以不引人注目的方式运作吗?

Nservicebus 传奇故事以不引人注目的方式运作吗?,nservicebus,saga,nservicebus4,Nservicebus,Saga,Nservicebus4,我有一个名为UploadService的端点,它包含一个由另一个程序集中定义的命令启动的传奇。该程序集中的命令通过以下行在端点的初始化中注册: public class EndpointInitialization : IWantCustomInitialization { public void Init() { NServiceBus.Configure.Features.Enable<NServiceBus.Featur

我有一个名为UploadService的端点,它包含一个由另一个程序集中定义的命令启动的传奇。该程序集中的命令通过以下行在端点的初始化中注册:

public class EndpointInitialization : IWantCustomInitialization
    {
        public void Init()
        {
            NServiceBus.Configure.Features.Enable<NServiceBus.Features.Sagas>();

            NServiceBus.Configure.With()
              .Log4Net()
              .UseInMemoryTimeoutPersister()
              .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Commands"))
              .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.Contains("Messages"))
              .UnicastBus()
                 .ImpersonateSender(false)
              .CreateBus()
              .Start();
        }
    }
公共类EndpointInitialization:IWantCustomInitialization
{
公共void Init()
{
NServiceBus.Configure.Features.Enable();
NServiceBus.Configure.With()
.Log4Net()
.UseInMemoryTimeoutPersister()中使用
.DefiningCommandsAs(t=>t.Namespace!=null&&t.Namespace.EndsWith(“命令”))
.DefiningMessagesAs(t=>t.Namespace!=null&&t.Namespace.Contains(“消息”))
.UnicastBus()
.ImpersonateSender(错误)
.CreateBus()
.Start();
}
}
但是,当通过Debug->start new instance启动端点时,NServiceBus.Core抛出以下异常:

“saga'MySaga'实现了'IHandleMessages'1',但消息类型'MyCommand'未被归类为消息。您应该使用'Unobtrusive Mode Messages',或者消息应该实现'IMessage','IEEvent'或'ICommand'

我有一个seprate端点,它引用了相同的命令程序集,并以相同的方式定义了自定义初始化,并且启动得很好(唯一的区别是另一个端点不使用sagas)


更新:我正在使用NServiceBus 4.2是的。传奇故事以不引人注目的方式运作。在实现IConfigureThisEndpoint的类中调用初始化代码,在该类中创建总线实例,这将为您解决问题

例如:

 public class EndpointConfig: IConfigureThisEndpoint, AsA_Publisher,  IWantCustomInitialization
{
    public void Init()
    {
        var container = new WindsorContainer();
        Configure.With()
            .CastleWindsorBuilder(container)
            .FileShareDataBus(@"..\..\..\DataBusShare\")
            .DefiningDataBusPropertiesAs(p => p.Name.EndsWith("DataBus"))
            .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.EndsWith("Commands"))
            .DefiningEventsAs(t => t.Namespace != null && t.Namespace.EndsWith("Events"))
            .DefiningMessagesAs(t => t.Namespace == "Messages")
            .DefiningEncryptedPropertiesAs(p => p.Name.StartsWith("Encrypted"))
            .UseNHibernateSagaPersister()
            .UseNHibernateTimeoutPersister()
            .UseNHibernateSubscriptionPersister();
        Configure.Serialization.Json();

    }
}

请您在github中创建一个问题并向我们发送一个repo?就可以了-也许我使用此功能是错误的,但问题似乎在于将我的消息定义放在一个自定义初始化类中,该类与我的端点配置分开。当我在与端点配置相同的类中指定我的初始化时,它会启动得很好。但是,NSB的设计目的不是让我的自定义初始化在一个单独的类中工作吗?对于不使用sagas的端点来说,将我的消息定义放在单独的自定义初始化类中似乎不是问题。可以有多个类实现IWantCustomInitialization,而不会出现任何问题。但是,在这些类中,要引用总线,应该使用Configure.Instance。而不是Configure.With()尝试在单独的类中使用Configure.Instance,仍然得到相同的异常。将init放在端点配置中似乎是解决这个问题的方法。