2010-04-06 1 views
0

При выполнении обработчика 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, в котором говорится: «Использование одного сеанса в нескольких потоках, вероятно, является ошибкой».

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

Любые идеи?

+0

Только примечание: NSB обертывает вас ручкой с TransactionScope. Это + факт, что nhibernate поддерживает System.Transactions, делает вас Session.BeginTransaction() избыточным. Вы должны уметь удалять его с любым воздействием на последовательность. –

ответ

2

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

+0

Спасибо Айенде. Я предположил, что все в порядке, но, тем не менее, было странно получать предупреждение. – SteveBering