2011-10-07 49 views
0

我想知道如何通過傳遞的參數緩存webservice返回的數據?通過參數傳遞給函數緩存webservices

例如:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string FunctionThatReturnsSomething(int param1){ 
    ... does something 
return strResult; 

} 

我想的是,返回的web服務返回的數據將被緩存,但根據該參數值(INR參數1)。因此,例如,如果webservice函數的值爲'1',它將緩存結果。如果函數對param1取得'2'整數,它將緩存另一個結果。

注意:webmethod/webservice正在通過使用POST方法的Ajax調用進行調用。

回答

1

ASP.NET只爲這類事情提供了Application Cache

在它最簡單的形式,你可以將數據添加到高速緩存是這樣的:

HttpRuntime.Cache["Key"] = "Value"; 

所以,你可以緩存你想輕鬆返回數據:

string cacheKey = "FunctionThatReturnsSomething_" + param1.ToString(); 

if (HttpRuntime.Cache[cacheKey] == null) 
{ 
    string myData = GetDataToReturn(param1); 

    HttpRuntime.Cache[cacheKey] = myData; 
} 

return (string)HttpRuntime.Cache[cacheKey]; 

它還允許你指定一個CacheDependancy。例如,如果您的數據基於本地文件,則可以在更新文件時自動清除緩存。

,如果它沒有被使用10分鐘,你也可以有你進入到一定時間後取出緩存中的數據,例如:

HttpRuntime.Cache.Insert(cacheKey, myData, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0)); 

或在絕對時間,如10分鐘後添加它:

HttpRuntime.Cache.Insert(cacheKey, myData, null, DateTime.Now.AddMinutes(10), 
System.Web.Caching.Cache.NoSlidingExpiration); 
+0

我認爲上面的Web方法的緩存屬性確實考慮了參數,但我需要100%確定。我更喜歡這個屬性,因爲它很容易使用。 –

+0

哈哈,當然是!我完全忘了WebMethods也可以使用輸出緩存,就像用戶控件一樣。值得把它放在單獨的答案中。如果您需要以編程方式使緩存無效,您也可以參考[HttpResponse.RemoveOutputCacheItem](http://msdn.microsoft.com/zh-cn/library/914c7ktw%28v=VS.90%29.aspx)。 – Kasaku