2012-07-04 117 views
0

我發展我的ASP.NET 4.5應用程序客戶端緩存。我設置了一個web服務。 jQuery使用GET Ajax調用訪問webservice。該函數有一個'id'參數,併爲每個id返回不同的內容。響應與304 - 使用ASP.NET Web服務

我想同時緩存服務器和客戶端的數據。在客戶端,我已經知道如何使用'CacheDuration',但問題出在客戶端。我使用HttpFox來獲取每個響應的標題。

我設置在函數的開頭下面的代碼:

HttpCachePolicy cache = HttpContext.Current.Response.Cache; 
    cache.SetCacheability(HttpCacheability.Private); 
    cache.SetExpires(DateTime.Now.AddMinutes((double)10)); 
    cache.SetMaxAge(new TimeSpan(0, 0, 10)); 


    FieldInfo maxAgeField = cache.GetType().GetField(
    "_maxAge", BindingFlags.Instance | BindingFlags.NonPublic); 
    maxAgeField.SetValue(cache, new TimeSpan(0, 10, 0)); 

我想要做的就是防止再次發送請求的相同ID的客戶端,並做就是咱們說.. 10分鐘。因此,在第一次調用請求將被製成,我們得到的響應200.在第二次響應頭應該是304

現在上面的代碼沒有做到這一點,我想知道如何做到這一點。同樣,我正在談論返回304的客戶端緩存,所以它希望再次訪問服務器以獲取相同的「ID」,直到緩存過期。

我知道,它可以使用的代碼,所以請不要提交解決方案的IIS型來完成。

需要你的幫助來解決這個問題。

回答

1

您需要執行的最後修改標題

Response.Cache.SetLastModified(lastWriteTime.Value.ToUniversalTime()); 

這將使你的客戶端檢查上次修改的值,而不是重取。

理論上你可以僞造使用

public static DateTime Round10(this DateTime value) 
{ 
    var ticksIn10Mins = TimeSpan.FromMinutes(10).Ticks; 

    DateTime dtReturn = (value.Ticks % ticksIn10Mins == 0) ? value : new DateTime((value.Ticks/ticksIn15Mins + 1) * ticksIn10Mins); 
    if(dtReturn > DateTime.Now()) 
    { 
     return dtReturn.AddMinutes(-10); 
    } else { 
     return dtReturn; 
    } 
} 


Response.Cache.SetLastModified(Round10(DateTime.Now); 

此代碼的最後修改時間到最近的10分鐘,是未經檢驗的,雖然

+0

我怎樣才能將其設置爲被緩存到10分鐘,可以給我的例子,我會嘗試 –

+0

請參閱上面的編輯.. –

+0

我無法訪問webservice中的'響應',任何我需要導入使用它? –