与NServiceBus的NHibernate Session问题

时间:2013-11-21 15:44:40

标签: nhibernate nservicebus nservicebus4

我们有一个简单的nservicebus(v4)设置,其中Web应用程序将各种消息发送到后端端点进行处理。一切进展顺利,直到提升并发水平。通常,但并非所有时间我们都会得到以下异常 -

System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.

我猜这是NHibernate(v3.1)会话管理的一个问题。现在,我们在每个处理程序中创建一个具有单例生命周期的新会话工厂和会话(因此每个处理程序应该拥有它自己的会话,对吧?)。基于此异常的最佳猜测是会话上的连接正被另一个处理程序使用?

任何人都能解开一些光明吗?为什么这是一个不一致的问题?

1 个答案:

答案 0 :(得分:0)

发现问题。我在每个处理程序中初始化结构图ObjectFactory,因此每个新消息都会覆盖最初初始化的另一个消息(在另一个线程上)。这意味着所有线程都使用最新消息创建的会话。来自IWantCustomInitialization的Init()方法的引导似乎解决了这个问题。