【发布时间】:2015-09-18 09:03:45
【问题描述】:
我正在尝试在 ASP.NET 4.5/C# 中缓存参数化的 GET webservice 调用。我已经尝试了在 StackOverflow 中阅读的所有选项,包括设置 HttpCachePolicy、使用 CacheDuration 属性,但我总是得到Cache-Control :no-cache、Expired: -1、Pragma: no-cache,并且对 web 服务的调用返回 200 而不是 304(未修改)。
内容已正确缓存在服务器上,但我希望缓存标头也能更新,这样它甚至不会在我在缓存中指定的给定时间内调用服务器。
我也尝试过这种方法,但没有奏效:
HttpCachePolicy cache = HttpContext.Current.Response.Cache;
cache.VaryByParams["*"] = true;
cache.SetCacheability(HttpCacheability.Private);
cache.SetExpires(DateTime.Now.AddSeconds((double)900));
FieldInfo maxAgeField = cache.GetType().GetField(
"_maxAge", BindingFlags.Instance | BindingFlags.NonPublic);
maxAgeField.SetValue(cache, new TimeSpan(0, 0, 900));
也试过了:
private void SetCachingPolicy()
{
HttpCachePolicy cache = HttpContext.Current.Response.Cache;
cache.VaryByParams["*"] = true;
cache.SetCacheability(HttpCacheability.Private);
cache.SetExpires(DateTime.Now.AddSeconds((double)900));
FieldInfo maxAgeField = cache.GetType().GetField(
"_maxAge", BindingFlags.Instance | BindingFlags.NonPublic);
maxAgeField.SetValue(cache, new TimeSpan(0, 0, 900));
}
缓存代码应用在 Web 服务调用 Web 方法中。
我希望 Web 服务调用(我从 jQuery/Ajax 调用)在客户端中缓存几秒钟或几分钟。
我正在我的 Windows 7 计算机上的本地 IIS 7.5 服务器上测试它,使用 Visual Studio 作为开发平台。我也在使用 Chrome 网络流量来测试响应头。
【问题讨论】:
-
您是否检查过您没有在本地 IIS 中设置标头?
-
@ste-fu,我用的是 IIS Express 10
-
尝试将其设置为使用本地 IIS 并在其中设置缓存标头?
-
@nope,不工作:(
-
看看这个 SO 答案。它讨论了同样的问题:stackoverflow.com/questions/17287144/…
标签: c# asp.net web-services caching