2

NServiceBus の不思議な世界で私のサガ データが作成されない理由について、誰かが何らかの洞察を提供できるかどうか疑問に思っていました。

NBus に付属するすべての構成と XML 地獄 (デフォルト) の背後で、自分のサガ データを機能させることができないようです。SQLにアクセスでき、テーブル、sprocなどを作成できる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" />
4

2 に答える 2

3

スキャンするアセンブリのリストに NServiceBus.NHibernate を含める必要があることを確認してください。

Configure.With(ScanAssemblies()) に 変更 Configure.With()

于 2015-11-10T08:36:48.280 に答える
0

特定のソフトウェアの「アセンブリ スキャン」ページに示されているように、NServicBus は bin フォルダー内のアセンブリをスキャンして、既知のインターフェイスを実装するタイプを探します。

カスタム アセンブリ スキャンを使用するようにバスを構成する場合は、アセンブリのリストに NServiceBus 拡張機能を明示的に含める必要があります。

次の記事では、将来の互換性に関する適切なリファレンスといくつかの構成を提供しています。

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

于 2015-11-12T15:17:05.223 に答える