2011-09-16 124 views
0

我構建了一個web服務。該Web服務需要緩存數據。數據是對象列表。根據web方法中傳遞的參數,數據將被過濾並返回給客戶端。Webservice支持多線程?

public class UpdateService : WebService 
{ 
    public List<object> Get(...) 
    { 
     return Util.Filter(CachingData.Data, ...); 
    } 
} 

我需要緩存這些數據,每過1小時後必須刷新(續訂)。我構建了一個名爲CachingData的靜態類。在這個類中,我創建靜態線程計時器:

public static class CachingData 
{ 
    public static List<object> Data; // cached data 

    private static System.Threading.Timer tmrGetHSXData = new System.Threading.Timer(DoGethsxEOD, null, 0, 60*60*1000); 

    private static DoGethsxEOD() 
    { 
     //... 
    } 
} 

DoGethsxEOD是一個靜態方法將每個在1小時後可以稱爲刷新數據。但是,DoGethsxEOD只調用一次。線程無法正常工作。

我想在此Web服務上緩存數據。每隔1小時後,這些數據將被刷新。我爲此任務使用了線程計時器。但是,它不起作用。

我不知道webservice有使用線程的支持。請幫我解決這個問題,以及如何存檔我的目的。謝謝。

回答

3

爲什麼不使用Classic Cache對象並設置過期時間(1小時)?

,你可以創建一個圍繞它的包裝來存儲你需要到緩存中的數據,並使其1小時

Cache.Insert("CacheItem6", "Cached Item 6", 
    null, DateTime.Now.AddHours(1), 
    System.Web.Caching.Cache.NoSlidingExpiration); 

到期後獲得更多信息:

http://msdn.microsoft.com/en-us/library/18c1wd61%28v=VS.100%29.aspx

如果你想

Cache.Insert允許您傳遞迴撥委託,您可以使用它自動刷新緩存:

Cache.Insert("MyText", someTextVariable, null, DateTime.Now.AddHours(1), 
      TimeSpan.Zero, CacheItemPriority.High, 
      new CacheItemRemovedCallback(ItemRemoved)) 


public void ItemRemoved(string key, object value, CacheItemRemovedReason reason) 
{ 
    // write your refresh logic 
} 
+0

你可以舉個例子。如果Cache對象過期,如何刷新它。謝謝。 –

+0

當緩存過期時,項目將不再存在於緩存中,並且它將返回空值。此時您可以刷新緩存。 您可以在您的「獲取邏輯」 –

+0

緩存數據每1小時後總是新的。如何刷新它。謝謝。 –