在“每个请求会话”Web 环境中出现死锁后重播事务



我希望能够在发生死锁时重新运行事务。在Ayende的博客文章中,他提到你需要扔掉整个NHibernate会话并重新开始。

在 Windows 应用中重新启动

会话相对简单,但在使用 Session-per-Request 模块时,如何在 Web 应用中执行此操作?会话在 IHttpModule 中打开和关闭。我能想到的唯一方法是以某种方式重新发布 http 帖子。这将是繁琐的,并且最终还可能重新执行已经成功提交的其他事务(因为我们每个会话有多个事务)。

您需要以某种方式公开 ISessionFactory,以便在需要时使用它来创建新的 ISession。一个快速的解决方案是在 global.asax 中设置一个静态属性。