加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.Net缓存疑难解答 – CacheDuration属性似乎没有任何效果

发布时间:2020-12-16 07:02:50 所属栏目:asp.Net 来源:网络整理
导读:我试图让ASP.Net通过设置WebMethod属性的CacheDuration属性来缓存Web服务请求的响应: [WebMethod(CacheDuration = 60)][ScriptMethod(UseHttpGet = true)]public static Liststring GetNames(){ return InnerGetNames();} 以上是ASP.Net页面上的一个方法(我
我试图让ASP.Net通过设置WebMethod属性的CacheDuration属性来缓存Web服务请求的响应:

[WebMethod(CacheDuration = 60)]
[ScriptMethod(UseHttpGet = true)]
public static List<string> GetNames()
{
    return InnerGetNames();
}

以上是ASP.Net页面上的一个方法(我也尝试将它移动到自己的类,但它似乎没有任何区别) – 我已将UseHttpGet设置为true,因为POST请求未缓存然而,尽管我付出了最大的努力,它似乎仍然没有任何区别(方法开始处的断点总是被击中).

这是我用来调用方法的代码:

%.ajax({
    url: "MyPage.aspx/GetNames",contentType: "application/json; charset=utf-8",success: function() {
        alert("success");
    }

有什么我错过了可能阻止ASP.Net缓存此方法的东西吗?

如果不这样做,我是否可以使用任何诊断机制来更清楚地了解ASP.Net缓存的情况?

解决方法

根据此 MSDN How to article,WebMethod属性的CacheDuration属性适用于XML WebMethods.由于ScriptMethod属性指定返回JSON,因此我们不得不使用对象级缓存:

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static List<string> GetNames()
{
    var result = GetCache<List<string>>("GetNames");
    if(result == null)
    {
        result = InnerGetNames();
        SetCache("GetNames",result,60);
    }
    return result;
}

protected static void SetCache<T>(string key,T obj,double duration)
{
    HttpContext.Current.Cache.Insert(key,obj,null,DateTime.Now.AddSeconds(duration),System.Web.Caching.Cache.NoSlidingExpiration);
}

protected static T GetCache<T>(string key) where T : class
{
    return HttpContext.Current.Cache.Get(key) as T;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读