2010-01-13 91 views
1

我有一個需要輸出緩存的ASP.NET應用程序。當從Web服務返回的數據發生更改時,我需要使緩存的項目無效,所以簡單的持續時間不夠好。ASP.NET輸出緩存 - 動態更新依賴關係

我一直在閱讀有關緩存依賴關係的內容,並認爲我有正確的想法。看起來我需要爲我的Web服務創建一個緩存依賴項。

要使用這種依賴關係,我想我應該用下面的方法頁輸出關聯:

Response.AddCacheItemDependency(cacheKey);

我正在努力的事情是我應該添加到緩存?

我的頁面的依賴關係是由Web服務返回的單個值。我目前的想法是,我應該通過繼承CacheDependency創建一個自定義緩存依賴關係,並將當前值存儲在緩存中。然後我可以使用Response.AddCacheItemDependency來形成依賴關係。

然後,我可以定期檢查值和NotifyDependencyChange以使我緩存的HTTP響應無效。

問題是,我需要確保緩存立即刷新,所以定期檢查不夠好。如何確保在從緩存中獲取HTTP響應之前,在緩存中代表Web服務返回值的依賴對象被重新評估?

問候,科林·E.

回答

0

我相信你是正確的軌道緩存的依賴上。但是,如果您沒有「定期檢查」Web服務的返回值,您怎麼知道它何時返回一個新值?您可能需要在另一個方向上設置Web服務,以便當其他系統中的值發生更改時,它可以調用您的系統並使舊緩存無效並粘貼新值。

+0

雷您好,感謝您的答覆。網絡服務電話價格低廉,每次請求頁面時我都可以做。我需要知道的是,在我的ASP應用程序中,我應該進行此檢查,它應該在服務器確定是否返回緩存響應之前發生。 – ColinE 2010-01-13 19:23:33

+0

那麼,你可以在每個頁面請求上做到這一點,但如果你有一個繁忙的網站,這似乎很浪費。如果通話費用低廉,您是否可以在緩存測試之間短暫停留(幾秒鐘)?或者,數據不是過時一秒鐘的絕對必要? (當然,這些數據在某些時候會過時,因爲它位於等待閱讀的用戶屏幕上。) – Ray 2010-01-13 20:23:37

0

可以使用手動無效緩存頁面:

System.Web.HttpResponse.RemoveOutputCacheItem(path) 
+0

嗨,感謝您的信息 - 我沒有意識到這一點。當用戶請求頁面時,在服務器檢查緩存響應之前,是否有oppurtunity從緩存中刪除頁面?這將允許我在處理每個頁面請求之前檢查遠程Web服務。 – ColinE 2010-01-13 19:25:07

+0

不,您必須在請求頁面之前使緩存無效。通常情況下,您可以在數據更新時執行此操作 - 可以自動使用緩存依賴項,也可以手動使用上述代碼。 – 2010-01-14 09:06:30