当我分发数据库会话时(我正在使用NHibernate),我试图帮助减少,以便只有当传入的请求是针对需要会话的对象时才会提出一个。
我知道有一种方法可以获取HttpApplication中的信息,这可以让我确定这一点,但我不确定它是否像我想的那样直截了当,或者我是否必须实现一些基于路线请求......等
有人可以推荐一些我可以查看确定此请求的方法吗?我已经回顾了HttpApplication类和一些属性/方法,并假设它将在HttpContext.Current.Request.RequestContext中的某个地方出现,但我想我会看到是否有一种简单的方法。
答案 0 :(得分:3)
这来自Oyvind Valland's Blog,他正在查找我正在寻找的内容,并检查所请求资源的传入请求以确定是否需要会话。朱利安·玛格丽特斯库(Julian Margarintescu)提出了一个很好的观点,但是如果出于某种其他原因需要回答实际问题的答案。
private static readonly string[] NoPersistenceFileExtensions = new string[] { ".jpg", ".jpeg", ".gif", ".png", ".css", ".js", ".swf", ".xap", ".ico" };
private static bool RequestMayRequirePersistence(HttpApplication httpApplication)
{
if (httpApplication == null)
return false;
HttpContext context = httpApplication.Context;
if (context == null)
return false;
string fileExtension = Path.GetExtension(context.Request.PhysicalPath);
return fileExtension != null && Array.IndexOf(NoPersistenceFileExtensions, fileExtension.ToLower()) < 0;
}
答案 1 :(得分:1)
您应该阅读Ayende关于cost of opening a session的这篇文章。空/未使用的会话非常轻,您可以为任何请求创建它们,因为它们不会打开数据库连接。