2012-03-06 128 views
0

我正在嘗試製作緩存其輸出內容的Web服務。Web服務 - 緩存更新

我已經添加了[WebMethod(CacheDuration=1800)],但問題是我希望Web服務在30分鐘後自動更新緩存,而無需任何請求。

我使用.net和C#。 Web服務實際上是一個獲取xml數據的代理,將其解析併發送給客戶端。

Web服務如何在一段時間(本身)後更新緩存?

+1

您有問題要問? – Oded 2012-03-06 16:20:26

+0

是的。 Web服務如何在一段時間後自行更新其緩存? – user1226051 2012-03-06 16:24:31

+0

爲什麼要在這種情況下緩存30分鐘?緩存一天。 – Oded 2012-03-06 16:26:39

回答

0

您可以使用timer classes之一來刷新緩存結果集 - 將其保存在類的字段中。

這樣你可以管理緩存而不是IIS。

到定時器的替代方法是使用Cache類 - 使用CacheItemUpdateCallback自動刷新緩存一旦到期(仍留有一個小窗口,用戶可以調用該方法它刷新 - 可能使用緩存項目)。

+0

根據你的鏈接,我認爲你不能在web中使用「System.Windows.Forms.Timer」。我嘗試了「System.Timers.Timer」類並使用了Elapsed事件,但它沒有擊中處理程序。我使用了下面提到的代碼。 'System.Timers.Timer t = new System.Timers.Timer(); t.Enabled = true; t.Interval = 5000; t.Elapsed + =新System.Timers.ElapsedEventHandler(t_Elapsed);無效t_Elapsed(對象發件人,System.Timers.ElapsedEventArgs E) { }' – Pankaj 2012-03-06 16:50:59

+0

我的第一個想法是使用一個新的線程休眠一段時間,然後開始執行(更新緩存),然後再次睡眠。儘管聽起來很簡單,但它卻是一個噩夢。在更新間隔期間共享的所有資源都必須鎖定,以便更新它們。對此有何建議? – user1226051 2012-03-06 17:44:31

+0

恩,我不確定,但我認爲你需要t.start()... – user1226051 2012-03-06 17:58:57