0

我们有一个简单的 nservicebus (v4) 设置,其中 Web 应用程序将各种消息发送到后端端点进行处理。在提高并发级别之前,一切都进行得很顺利。通常,但并非所有时候,我们都会遇到以下异常 -

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

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

任何人都可以解释一下吗?为什么这是一个不一致的问题?

4

1 回答 1

0

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

于 2013-11-22T16:14:17.137 回答