2011-05-12 118 views
2

我有一个运行在IIS 7.5上的ASP MVC 3网站,我不能阻止它缓存。防止在IIS 7.5上运行的ASP MVC网站缓存

我已经通过向网站添加'* Do Not Cache'条目来禁用IIS中的输出缓存,并在结果执行上在控制器上添加了一个操作筛选器,以防止缓存(请参见下面的代码),但是当我使用该网站,它仍然是缓存。我从Internet Explorer和Firefox删除了所有历史记录和Cookie等,但我仍然看到旧数据。

有没有人有任何想法或建议,我可以做什么来尝试和预防呢?

由于提前,

詹姆斯

UPDATE

我进一步挖掘使用SQL事件探查器,它似乎是SQL服务器缓存查询。情况会是这样吗?

月2日更新

我现在知道,如果不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); 
    } 
+0

你完全确信数据本身不仅仅是旧的吗?我很确定MVC不会仅仅默认缓存所有内容。我不记得曾经遇到过这个问题 – Jimmy 2011-05-12 13:13:50

+0

嗨吉米 - 是的,我确定。数据得到更新,我可以看到,在SQL使用管理工作室,但该网站仍然显示旧数据。 – 2011-05-12 13:17:43

+0

吉米是对的。 MCV不应该默认缓存,IIS也不应该缓存。你能更具体地说明你在做什么吗?你的代码执行什么操作?你期望发生什么? – rciq 2011-05-12 13:29:24

回答

2

您可以尝试将OutputCach属性添加到动作并将持续时间设置为几秒。 例如: [OutputCache(Duration = 1,VaryByParam =“none”)]

0

它不是简单的问题是在浏览器缓存本身是它吗? 尝试添加无缓存元标记?

<HTML><HEAD> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
</HEAD><BODY> 
</BODY> 
</HTML> 

只是一个想法,你也可以设置无缓存头。也许可以使用Fiddler来检查没有缓存响应的浏览器。

+0

我会尝试,但是如果2人登录,他们会得到相同的陈旧数据 – 2011-05-12 14:07:55

0

已解决!!!

这是NHibernate!

它对每个呼叫使用相同的会话而不是每个请求的会话。