通过参数传递给函数来缓存Web服务

时间:2011-10-07 10:50:16

标签: asp.net web-services caching optimization webmethod

我想知道如何通过传递的参数来缓存webservice返回的数据?

例如:

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

}

我想要的是返回的webservice返回的数据将被缓存,但是根据参数值(inr param1)。因此,例如,如果webservice函数的值为'1',它将缓存该结果。如果函数为param1得到'2'整数,它将缓存另一个结果。

注意:使用POST方法通过Ajax调用调用webmethod / webservice。

1 个答案:

答案 0 :(得分: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);