【发布时间】:2011-08-24 02:46:33
【问题描述】:
我有一个在 IIS 7.5 上运行的 ASP MVC 3 站点,我无法阻止它进行缓存。
我已通过向网站添加“* Do Not Cache”条目来禁用 IIS 中的输出缓存,并在结果执行时在控制器上添加了一个动作过滤器,该过滤器也阻止了缓存(参见下面的代码),但是当我使用网站,它仍在缓存中。我已经从 Internet Explorer 和 Firefox 中删除了所有历史记录和 cookie 等,但我仍然看到旧数据。
是否有人对我可以做些什么来尝试防止这种情况有任何想法或建议?
提前致谢,
詹姆斯
更新
我已经使用 SQL 探查器进一步挖掘,它似乎是 SQL 服务器缓存查询。会这样吗?
第二次更新
我现在知道 definitley 不是 SQL 缓存,现在查看 IIS 和 MVC
已解决!!!
它是 NHibernate!
每次调用都使用同一个会话,而不是每个请求都使用一个会话。
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation (HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
base.OnResultExecuting(filterContext);
}
【问题讨论】:
-
您完全确定数据不只是旧数据本身吗?我很确定 MVC 默认不会缓存所有内容。我不记得曾经遇到过这个问题
-
嗨,吉米 - 是的,我确定。数据得到更新,我可以在使用管理工作室的 SQL 中看到,但该站点仍显示旧数据。
-
吉米是对的。默认情况下,MCV 不应缓存,IIS 也不应缓存。你能更具体地说明你在做什么吗?您的代码执行了哪些操作,您希望发生什么?
标签: sql-server asp.net-mvc nhibernate iis caching