我们正在申请中引入nservicebus 3和saga支持。我们已经按如下方式配置了nhibernate saga persister:
<NHibernateSagaPersisterConfig>
<NHibernateProperties>
<add Key="connection.provider" Value="NHibernate.Connection.DriverConnectionProvider"/>
<add Key="connection.driver_class" Value="NHibernate.Driver.SqlClientDriver"/>
<add Key="dialect" Value="NHibernate.Dialect.MsSql2008Dialect"/>
<add Key="connection.connection_string_name" Value="TeamGameServiceDB"/>
</NHibernateProperties>
</NHibernateSagaPersisterConfig>
public void InitializeServiceBus(IWindsorContainer container)
{
SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure);
Configure.With()
.DefiningMessagesAs(t => t.ImplementsTheInterface(typeof (IMessage)))
.Log4Net()
.CastleWindsorBuilder(container)
.XmlSerializer()
.MsmqTransport()
.IsolationLevel(System.Transactions.IsolationLevel.RepeatableRead)
.UnicastBus()
.Sagas()
.NHibernateSagaPersister();
}
当传奇即将被持久化时,我得到一个例外,说“没有会话被绑定到当前的上下文”。我浏览了nservicebus.nhibernate项目,我无法弄清楚谁负责设置SagaPersistor使用的当前会话(saga persistor使用ISessionFactory.GetCurrentSession())。由nhibernate saga persister配置的会话工厂设置为使用“NHibernate.Context.ThreadStaticSessionContext”,这意味着nservicebus堆栈中的某些东西应该分配它。任何人都可以帮助我阐明如何分配ISessionFactory.GetCurrentSession()吗?即将保留的传奇是从公共汽车发起的。发送本地消息。
答案 0 :(得分:2)
您需要使用NServiceBus.NHibernate.dll中包含的NHibernate UnitOfWork