使用NServiceBus时,NHProf中的“在多个线程中使用单个会话可能是一个错误”错误

时间:2010-04-06 23:03:58

标签: nhibernate nservicebus nhprof

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

处理程序的代码类似于:

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

    tx.Commit();
}

当我描述这个过程时,我看到以下几行:

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

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

我不认为这是一个问题,因为那时候真的没什么可承诺的,但我在这里做的不合适吗?我确实希望在事务中运行我的代码,但是当我这样做时,我会收到此警报。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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