【问题标题】:NServiceBus saga data not createdNServiceBus 传奇数据未创建
【发布时间】:2015-11-09 16:25:01
【问题描述】:

我想知道是否有人可以提供一些见解,说明为什么在 NServiceBus 的神秘世界中没有创建我的传奇数据。

在 NBus 附带的所有配置和 XML 地狱(默认情况下)背后,我似乎无法让我的传奇数据正常工作。尽管我使用我可以访问 SQL 并且可以创建表、存储过程等的 Windows 凭据通过调试模式运行端点,但无论出于何种原因,都没有创建该表。

我可以复制和粘贴我的配置,但这很广泛,但我会提供我认为对这篇文章有用的内容,但如果您需要更多信息,请大声说出来,我会答应的。

我想我想知道需要添加什么额外的魔法才能让它起作用?

干杯,DS。

public class EndpointConfig : 
    IConfigureThisEndpoint, 
    AsA_Publisher, 
    IWantCustomInitialization,
    IWantToRunBeforeConfigurationIsFinalized
{
    public void Init()
    {
        Configure.Serialization.Json();
        Configure.With(ScanAssemblies())
            .DefaultBuilder()
            .UseNHibernateSubscriptionPersister()
            .UseNHibernateTimeoutPersister()
            .UseNHibernateSagaPersister()
            .EnablePerformanceCounters()
            .DefiningCommandsAs(MessageTypeDefinition.IsCommand)
            .DefiningEventsAs(MessageTypeDefinition.IsEvent)
            .UnicastBus();

        Configure.Transactions.Advanced(x => x.DisableDistributedTransactions());
    }

    private static Assembly[] ScanAssemblies()
    {
        return new[] { typeof(Foo).Assembly, typeof(EndpointConfig).Assembly };
    }
}

行动中的传奇..

public class MySaga :
    Saga<SagaData>,
    IAmStartedByMessages<SomeContract >,
    IHandleMessages<SomeOtherContract>
{
    public override void ConfigureHowToFindSaga()
    {
        this.ConfigureMapping<SomeContract>(x => x.Blah).ToSaga(y => y.UniqueRef);
        this.ConfigureMapping<SomeOtherContract>(x => x.Hello).ToSaga(y => y.UniqueRef);
    }

    public void Handle(SomeContract message)
    {
        this.Data.HasFoo = true;
        this.DoStuff();
    }

    public void Handle(SomeOtherContract message)
    {
        this.Data.HasBar = true;
        this.DoStuff();
    }

    private void DoStuff()
    {
        if (this.HasCompleted())
        {
            this.Bus.Send(new Something());
            this.MarkAsComplete();
        }
    }

    private bool HasCompleted()
    {
        return this.Data.HasFoo && this.Data.HasBar;
    }
}

public class SagaData : IContainSagaData
{
    public SagaData()
    {
    }

    public virtual Guid Id { get; set; }

    public virtual string OriginalMessageId { get; set; }

    public virtual string Originator { get; set; }

    public virtual bool HasFoo { get; set; }

    public virtual bool HasBar { get; set; }

    [Unique]
    public virtual string UniqueRef { get; set; }
}

编辑 添加当前使用的版本。

<package id="NHibernate" version="3.3.3.4001" targetFramework="net451" />
  <package id="NServiceBus" version="4.6.10" targetFramework="net451" />
  <package id="NServiceBus.Host" version="4.6.10" targetFramework="net451" />
  <package id="NServiceBus.Interfaces" version="4.6.10" targetFramework="net451" />
  <package id="NServiceBus.NHibernate" version="4.5.5" targetFramework="net451" />

【问题讨论】:

  • 日志有错误吗?如果您设置断点,您的处理程序真的会受到影响吗?

标签: c# nservicebus nservicebus-sagas


【解决方案1】:

很确定您必须在要扫描的程序集列表中包含 NServiceBus.NHibernate。

改变 Configure.With(ScanAssemblies())Configure.With()

【讨论】:

    【解决方案2】:

    正如特定软件“程序集扫描”页面所示,NServicBus 将扫描 bin 文件夹中的程序集,寻找实现已知接口的类型。

    如果您将总线配置为使用自定义程序集扫描,则需要在程序集列表中明确包含 NServiceBus 扩展。

    下面的文章提供了一个很好的参考和一些关于未来兼容性的配置。

    http://docs.particular.net/nservicebus/hosting/assembly-scanning

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多