«Использование одного сеанса в нескольких потоках, скорее всего, ошибка» в NHProf при использовании NServiceBus - PullRequest
0 голосов
/ 07 апреля 2010

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

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

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

    tx.Commit();
}

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

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

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

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

Есть идеи?

1 Ответ

2 голосов
/ 07 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...