使用 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)会导致问题 [重复]