"Использование одного сеанса в нескольких потоках, скорее всего, ошибка" в 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 и стандартного коммита приводит в замешательство. Я исправлю это.