0

在执行使用 NHibernate 进行数据访问操作的 NServiceBus 处理程序时,我看到一个错误,我不确定是否需要关注。

处理程序具有执行以下操作的代码:

using (var tx = Session.BeginTransaction()) 
{
    var accountGroup = _groupRepository.FindByID(message.GroupID);
    accountGroup.CreateAccount(message.AccountNumber);

    tx.Commit();
}

当我分析这个过程时,我看到以下几行:

  • 在具有隔离级别的分布式事务中登记会话:可序列化
  • 以隔离级别开始事务:未指定
  • SELECT ... FROM AccountGroups this_ WHERE this_.ID = 123
  • 插入帐户...
  • 提交事务
  • 提交事务

当我调用 tx.Commit() 时,我的代码会生成第一条提交消息。第二个提交消息,我相信当我们离开处理程序的 Handle 方法并由 NServiceBus 调用时发生。第二次提交调用会在 NProf 中生成一个警报,指出“在多个线程中使用单个会话可能是一个错误”。

我不认为这是一个问题,因为当时确实没有什么可以提交的,但是我在这里做了一些不合适的事情吗?我确实想在事务中运行我的代码,但是当我这样做时,我会收到此警报。

有任何想法吗?

4

1 回答 1

2

这不是问题,正在发生的事情是 NH Prof 检测到 DTC 提交正在另一个线程中发生。它实际上应该正确处理 DTC 提交,所以我不确定发生了什么。猜测一下,同时使用 DTC 提交和标准提交会让人感到困惑。我会修复它。

于 2010-04-07T07:32:56.483 回答