При выполнении обработчика NServiceBus, который использует NHibernate для операций доступа к данным, я вижу ошибку, которую я не уверен, если мне нужно .«Использование одного сеанса в нескольких потоках, вероятно, ошибка» в NHProf при использовании 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
- INSERT INTO Accounts ...
- фиксации транзакции
- фиксации транзакции
Сообщение первая фиксация генерируется мой код, когда я называю tx.Commit(). Второе сообщение фиксации, я считаю, возникает, когда мы оставляем метод Handle обработчика и вызывается NServiceBus. Этот второй вызов commit генерирует предупреждение в NHProf, в котором говорится: «Использование одного сеанса в нескольких потоках, вероятно, является ошибкой».
Я не думаю, что это проблема, потому что в то время действительно нечего совершать, но неужели я делаю некоторые неуместные? Я хочу запустить свой код внутри транзакции, но когда я это сделаю, я получаю это предупреждение.
Любые идеи?
Только примечание: NSB обертывает вас ручкой с TransactionScope. Это + факт, что nhibernate поддерживает System.Transactions, делает вас Session.BeginTransaction() избыточным. Вы должны уметь удалять его с любым воздействием на последовательность. –