"Использование одного сеанса в нескольких потоках, скорее всего, ошибка" в NHProf при использовании NServiceBus

При выполнении обработчика NServiceBus, который использует NHibernate для своих операций доступа к данным, я вижу ошибку, которую я не уверен, если мне нужно беспокоиться.

У обработчика есть код, который делает что-то вроде этого:

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

    tx.Commit();
}

Когда я профилирую этот процесс, я вижу следующие строки:

  • зачисленный сеанс в распределенной транзакции с уровнем изоляции: Сериализуемый
  • начать транзакцию с уровнем изоляции: не указано
  • SELECT ... FROM AccountGroups this_ ГДЕ this_.ID = 123
  • Вставить в учетные записи...
  • совершить транзакцию
  • совершить транзакцию

Первое сообщение коммита генерируется моим кодом, когда я вызываю tx.Commit(). Второе сообщение коммита, я полагаю, происходит, когда мы покидаем метод Handle обработчика и вызывается NServiceBus. Этот второй вызов commit генерирует предупреждение в NHProf, которое гласит: "Использование одного сеанса в нескольких потоках, скорее всего, ошибка".

Я не думаю, что это проблема, потому что в то время действительно нечего было совершать, но я делаю что-то неуместное здесь? Я хочу запустить свой код в транзакции, но когда я это делаю, я получаю это предупреждение.

Есть идеи?

1 ответ

Решение

Это не проблема, так как NH Prof обнаруживает, что фиксация DTC происходит в другом потоке. Он должен обрабатывать DTC-коммиты правильно, поэтому я не уверен, что происходит. Предполагается, что использование DTC и стандартного коммита приводит в замешательство. Я исправлю это.

Другие вопросы по тегам