NHIbernate IHttpModule和TransactionScope

时间:2012-01-21 03:20:50

标签: wcf nhibernate msmq transactionscope

只是想知道在IHttpModule中使用TransactionScope的其他想法是什么。 例如:

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

// do some stuff...


EndRequest:
// commit UOW
// commit transaction scope

在http请求的生命周期内保持transactioncope打开真的是一个明智的想法吗? 我需要同时写入事务性MSMQ并且需要TransactionScope。我希望持久存储数据库更新以及要发送的MSMQ消息,否则,将其全部回滚...

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

这会随机失败,因为在ASP.NET中无法保证BeginRequest和EndRequest将在同一个线程上发生(又名thread-agility)。如果您尝试在与创建它的线程不同的线程上处理它,则事务范围将引发异常。因此,在偶然的事件中,EndRequest在不同的线程上执行,然后是BeginRequest,抛出了这个异常。

更多细节:

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