2011-05-12 117 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!

它對每個呼叫使用相同的會話而不是每個請求的會話。