NHIbernate IHttpModule и TransactionScope - PullRequest
       20

NHIbernate IHttpModule и TransactionScope

1 голос
/ 21 января 2012

Просто интересно, что другие думают об использовании TransactionScope в IHttpModule.Например:

BeginRequest
//start new TransactionScope
// start UOW
// Begin UOW transaction

// do some stuff...


EndRequest:
// commit UOW
// commit transaction scope

Является ли действительно мудрой идеей держать транзакцию открытой в течение всего срока действия HTTP-запроса?Мне нужно одновременно писать в транзакционный MSMQ и мне нужен TransactionScope.Я бы хотел, чтобы обновления БД сохранялись, а также отправлялись сообщения MSMQ, или же откатите все назад ...

Любой совет?

1 Ответ

3 голосов
/ 25 января 2012

Это может произойти случайным образом, потому что в ASP.NET нет гарантии, что BeginRequest и EndRequest будут происходить в одном потоке (он же thread-agility ).Область действия транзакции вызовет исключение, если вы попытаетесь избавиться от него в потоке, отличном от того, в котором он был создан.Таким образом, в случайном случае, когда EndRequest выполнялся в другом потоке, отличном от BeginRequest, было выдано это исключение.

Для более подробной информации:

http://www.mattwrock.com/post/2010/12/26/Getting-TransactionScope-to-play-nice-with-NHibernate.aspx

...