2015-11-09 3 views
2

Мне было интересно, может ли кто-нибудь дать некоторое представление о том, почему в таинственном мире NServiceBus мои данные о саге не создаются.NSServiceBus данные саги не созданы

За всей конфигурацией и адском XML, который поставляется с NBus (по умолчанию) Я не могу заставить данные моей саги работать. Таблица по какой-либо причине не создается, хотя я запускаю конечную точку через режим отладки, используя мои учетные данные Windows, у которых есть доступ к SQL, и могу создавать таблицы, sprocs и т. Д.

Я могу скопировать и вставить мой конфиг, но это однако я предоставлю то, что считаю полезным для этого поста, но если вам нужна дополнительная информация, тогда, пожалуйста, кричите, и я обязам.

Я думаю, мне интересно, какая дополнительная магия должна быть подключена, чтобы это работало?

Cheers, 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; } 
} 

EDIT Добавление какая версия используется в настоящее время.

<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" /> 
+0

Есть ли ошибки в журнале? Действительно ли ваши обработчики попадают, если вы установили точки останова? –

ответ

3

Довольно, что вы должны включить NServiceBus.NHibernate в список сборок для сканирования.

Изменить Configure.With(ScanAssemblies()) в Configure.With()

0

Как странице конкретного программного обеспечения «Сборка Сканирование» указывает на то, NServicBus просканирует сборок в папке бин ищет типов, которые реализуют известные интерфейсы.

В случае, если вы настроили шину для использования пользовательского сканирования сборок, вам необходимо явно включить расширения NServiceBus в список сборок.

В следующей статье приведена хорошая справочная информация и некоторые конфигурации относительно будущей совместимости.

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