Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.Net缓存疑难解答-CacheDuration属性似乎没有效果_Asp.net_Jquery_Ajax_Caching - Fatal编程技术网

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

ASP.Net缓存疑难解答-CacheDuration属性似乎没有效果,asp.net,jquery,ajax,caching,Asp.net,Jquery,Ajax,Caching,我试图通过设置WebMethod属性的CacheDuration属性,使ASP.Net缓存web服务请求的响应: [WebMethod(CacheDuration = 60)] [ScriptMethod(UseHttpGet = true)] public static List<string> GetNames() { return InnerGetNames(); } 是否有任何我遗漏的可能阻止ASP.Net缓存此方法的内容 否则,我是否可以使用任何诊断机制来更清楚地

我试图通过设置
WebMethod
属性的
CacheDuration
属性,使ASP.Net缓存web服务请求的响应:

[WebMethod(CacheDuration = 60)]
[ScriptMethod(UseHttpGet = true)]
public static List<string> GetNames()
{
    return InnerGetNames();
}
是否有任何我遗漏的可能阻止ASP.Net缓存此方法的内容


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

验证您的浏览器是否未发送缓存控件:无缓存标头及其请求。根据文档,如果用户代理未指定缓存,则不会发送缓存结果

根据您发布的.ajax调用,您应该很好,但是仔细检查实际发送到服务器的内容会让您确定

像这样的工具对于调试浏览器/web服务交互的网络上正在发生的事情非常有用。

因此,WebMethod属性的CacheDuration属性适用于XMLWebMethods。由于ScriptMethod属性指定返回JSON,因此我们不得不改用对象级缓存:

[WebMethod]
[脚本方法(UseHttpGet=true)]
公共静态列表GetNames()
{
var result=GetCache(“GetNames”);
如果(结果==null)
{
结果=InnerGetNames();
SetCache(“GetNames”,结果,60);
}
返回结果;
}
受保护的静态void SetCache(字符串键,T obj,双持续时间)
{
HttpContext.Current.Cache.Insert(key,obj,null,DateTime.Now.AddSeconds(duration),System.Web.Caching.Cache.NoSlidingExpiration);
}
受保护的静态T GetCache(字符串键),其中T:class
{
返回HttpContext.Current.Cache.Get(key)作为T;
}

已选中此选项-未发送缓存控制标头-我也尝试自己明确设置缓存控制标头,但没有任何区别。请尝试查看服务器上的perfmon中的ASP.NET应用程序计数器集、缓存API项和输出缓存项(可能还有同一区域中的命中/未命中计数器)。这至少会告诉您ASP.Net是否正在缓存项但不发送它们,或者缓存输出但出于某种原因决定每个页面都是唯一的并缓存它们(例如,在第一次请求时,您应该看到条目数增加,在后续的请求中,如果它工作,则缓存命中率增加,但如果条目随着每个请求的增加而增加,则它认为请求因某种原因而不同)。
%.ajax({
    url: "MyPage.aspx/GetNames",
    contentType: "application/json; charset=utf-8",
    success: function() {
        alert("success");
    }