C# 未创建NServiceBus saga数据
我想知道是否有人能提供一些关于为什么在神秘的NServiceBus世界中我的传奇数据没有被创建的见解 在NBus(默认情况下)附带的所有配置和XML地狱背后,我似乎无法让我的传奇数据正常工作。尽管我正在使用windows凭据通过调试模式运行端点,但由于任何原因都没有创建表,我可以访问SQL并创建表、存储过程等 我可以复制和粘贴我的配置,但这是广泛的,但我会提供什么,我认为有用的这篇文章,但如果你需要进一步的信息,那么请大声喊出来,我会尽力 我想我在想,为了让它发挥作用,还需要什么额外的魔力 干杯,干杯C# 未创建NServiceBus saga数据,c#,nservicebus,nservicebus-sagas,C#,Nservicebus,Nservicebus Sagas,我想知道是否有人能提供一些关于为什么在神秘的NServiceBus世界中我的传奇数据没有被创建的见解 在NBus(默认情况下)附带的所有配置和XML地狱背后,我似乎无法让我的传奇数据正常工作。尽管我正在使用windows凭据通过调试模式运行端点,但由于任何原因都没有创建表,我可以访问SQL并创建表、存储过程等 我可以复制和粘贴我的配置,但这是广泛的,但我会提供什么,我认为有用的这篇文章,但如果你需要进一步的信息,那么请大声喊出来,我会尽力 我想我在想,为了让它发挥作用,还需要什么额外的魔力 干杯
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; }
}
公共类MySaga:
传奇故事
我开始发短信,
IHandleMessages
{
公共覆盖无效配置HowtoFindsaga()
{
this.ConfigureMapping(x=>x.Blah).ToSaga(y=>y.UniqueRef);
this.ConfigureMapping(x=>x.Hello).ToSaga(y=>y.UniqueRef);
}
公共无效句柄(SomeContract消息)
{
this.Data.HasFoo=true;
这是DoStuff();
}
公共无效句柄(SomeOtherContract消息)
{
this.Data.HasBar=true;
这是DoStuff();
}
私人无效文件()
{
if(this.HasCompleted())
{
this.Bus.Send(新事物());
this.MarkAsComplete();
}
}
二等兵布尔已完成()
{
返回this.Data.HasFoo&&this.Data.HasBar;
}
}
公共类SagaData:IContainSagaData
{
公共萨加达塔()
{
}
公共虚拟Guid Id{get;set;}
公共虚拟字符串OriginalMessageId{get;set;}
公共虚拟字符串发起者{get;set;}
公共虚拟bool HasFoo{get;set;}
公共虚拟布尔HasBar{get;set;}
[独一无二]
公共虚拟字符串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" />
非常确定您必须在要扫描的程序集列表中包括NServiceBus.NHibernate 改变
Configure.With(scansassemblies())
到
Configure.With()
如特定软件“程序集扫描”页面所示,NServicBus将扫描bin文件夹中的程序集,以查找实现已知接口的类型
如果将总线配置为使用自定义程序集扫描,则需要在程序集列表中显式包括NServiceBus扩展
下面的文章提供了一个很好的参考和一些关于未来兼容性的配置
日志中是否有错误?如果设置断点,处理程序是否真的会被命中?