>我有一个名为 UploadService 的端点,它包含一个由另一个程序集中定义的命令启动的 saga。该程序集中的命令通过以下行在终结点的初始化中注册:
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();
}
}
但是,当通过调试>启动新实例启动端点时,NServiceBus.Core 会引发以下异常:
"saga 'MySaga' 实现了 'IHandleMessages'1',但消息类型'MyCommand' 未归类为消息。您应该使用'不显眼模式消息',或者消息应该实现'IMessage','IEvent'或'ICommand'。
我有一个单独的端点,它引用相同的命令程序集,并以相同的方式定义自定义初始化,并且启动得很好(唯一的区别是另一个端点不使用 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();
}
}