NServiceBus,找不到消息类型的传奇

标签 nservicebus

我下面的传奇不处理 ValidateRegistration 和 ValidateRegistration 命令。我看到“无法找到消息类型 Registrations.Messages.ValidateRegistration with id ... 的传奇”消息。

我查找传奇的配置不正确吗?请帮忙!

谢谢

PS:我在注册过程中使用通用主机,并且使用 NServiceBus.Lite 配置文件。

public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization
{
    #region Implementation of IWantCustomInitialization

    public void Init()
    {
        var kernel = new StandardKernel();
        kernel.Load(new BackendModule());

        //Configure.Instance.Configurer.ConfigureProperty<RegistrationSaga>(x => x.Factory, kernel.Get<IAggregateRootFactory>());
        Configure.With().NinjectBuilder(kernel);
    }

    #endregion
}

public class RegistrationSagaData : IContainSagaData
{
    #region Implementation of ISagaEntity

    public virtual Guid Id { get; set; }
    public virtual string Originator { get; set; }
    public virtual string OriginalMessageId { get; set; }

    public virtual RegistrationID RegistrationID { get; set; }
    public virtual bool IsValidated { get; set; }
    public virtual string RegistrationType { get; set; }

    #endregion
}

public class RegistrationSaga : Saga<RegistrationSagaData>,
                                IAmStartedByMessages<StartRegistration>,
                                IHandleMessages<ValidateRegistration>,
                                IHandleMessages<CancelRegistration>
{
    public RegistrationFactory Factory { get; set; }

    public override void ConfigureHowToFindSaga()
    {
        ConfigureMapping<StartRegistration>(data => data.RegistrationID, registration => registration.ID);
        ConfigureMapping<ValidateRegistration>(data => data.RegistrationID, registration => registration.ID);
        ConfigureMapping<CancelRegistration>(data => data.RegistrationID, registration => registration.ID);
    }

    #region Implementation of IMessageHandler<StartRegistration>

    public void Handle(StartRegistration message)
    {
        Data.IsValidated = false;
        Data.RegistrationType = message.RegistrationType;

        Bus.SendLocal(new CreateRegistration
        {
            RegistrationType = message.RegistrationType,
            ID = message.ID
        });

        Console.WriteLine("======> handled StartRegistration");
    }

    #endregion

    #region Implementation of IMessageHandler<ValidateRegistration>

    public void Handle(ValidateRegistration message)
    {
        MarkAsComplete();

        Console.WriteLine("======> handled ValidateRegistration");
    }

    #endregion

    #region Implementation of IMessageHandler<CancelRegistration>

    public void Handle(CancelRegistration message)
    {
        Console.WriteLine("======> handled CancelRegistration");

        MarkAsComplete();
    }

    #endregion
}

最佳答案

您的 StartRegistration 处理程序未将 RegistrationID 添加到 Saga 的数据中。因此,您对ConfigureHowToFindSaga 的覆盖被映射到在处理其他命令时没有任何值的属性上。

关于NServiceBus,找不到消息类型的传奇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10198974/

相关文章:

asp.net-mvc-4 - 使用 NServiceBus 和 MVC 的 StructureMap 管理 RavenDB IDocumentSession 生命周期

design-patterns - 命令查询分离验证重试

c# - 容器不处理 transient 组件

c# - NServiceBus 中的 SendOnly

使用 .XmlSerializer() 的 NServiceBus 4 配置错误

web-services - 良好的服务层开发和设计 : What are the common bad practices in communications tier development?

design-patterns - IoC、容器和 NServiceBus 混淆

c# - 需要在消息处理程序中引用的全局对象

c# - nservicebus并发访问saga数据

ravendb - nservicebus 4.0.3 如何禁用 ravendb