使用 Asp.net WebForms 进行休眠 - 每个请求的会话

Posted

技术标签:

【中文标题】使用 Asp.net WebForms 进行休眠 - 每个请求的会话【英文标题】:Nhibernate with Asp.net WebForms - Session per Request 【发布时间】:2011-05-06 09:47:26 【问题描述】:

我正在使用一个 HttpModule 打开一个跨越每个请求的会话,它非常适合延迟加载和一切。

我担心的是,由于我为每个请求打开一个新会话(并将其存储在 HttpContext.Current.Items 中),它会为每个请求打开一个会话,甚至包括对 .css 文件和图像的请求的请求。 我记得读过会话创建是一个非常轻量级的操作(虽然不知道事务),但无论如何似乎没有必要打开会话以请求 .css 文件?

任何人对此有一些想法,这是一个问题和/或我在做一些愚蠢的事情吗?

提前致谢

【问题讨论】:

你的意思是HttpModule,不是HttpHandler,对吧? 您当然是对的,现在正在编辑答案。谢谢 【参考方案1】:

仅当文件类型为 .aspx 或 .ashx 时才创建会话对象:

    switch (context.Request.CurrentExecutionFilePathExtension.ToLower())
    
        case ".aspx":
        case ".ashx":
            context.Items[ContextKey] = CreateMySession();
            break;
    

或者将会话创建封装在一个属性getter中,清理检查是否session != null

【讨论】:

为每个请求(每个 aspx/ashx)开始 Nhib 事务的成本是多少?我可以为每个请求进行事务处理,还是应该在需要时显式打开它们?

以上是关于使用 Asp.net WebForms 进行休眠 - 每个请求的会话的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 HTML POST 数据以在 ASP.NET WebForms 中进行操作?

从 ASP.NET WebForms 迁移到 ASP.NET MVC 的建议?

在 ASP.Net WebForms 中使用捆绑(来自 Systelm.Web.Optimization)会导致问题 [重复]

ASP.Net WebForms + Paypal 表单

ASP.NET WebForms FriendlyUrlSegments 不包含采用 0 个参数的构造函数

正确使用 asp.net webforms 生命周期