System.Web.HttpContext.Current.Cache在不同的浏览器中返回不同的结果

时间:2014-12-15 17:55:02

标签: asp.net web-services caching httpcontext.cache

我有一个有效的ASP.Net Web服务,它使用System.Web.HttpContext.Current.Cache(Insert和Get)来缓存结果。出于测试目的,我在Web服务结果中显示时间。

在同一个浏览器上,它会正确缓存并且不会刷新,直到我设置的1分钟到期。

如果我在另一个浏览器中运行相同的Web服务(即使在同一台机器上),它会返回一个不同的时间,然后每分钟正确缓存一次。之前的浏览器仍显示其旧结果(直到时间到期)。

使用Safari在iPhone上进行测试可以做同样的事情(与其他两个浏览器不同的缓存结果)。

为什么缓存的结果会有不同的浏览器?我对缓存有点新意,所以我显然在这里遗漏了一些东西。我试图为每个人缓存结果,而不仅仅是同一个浏览器上的同一个人。我希望在任何浏览器中返回的时间都是所有用户的SAME。

这是我运行的代码:

 HttpContext.Current.Cache.Insert("GetIDList", sJSON, Nothing, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration)

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您正在为当前请求设置HttpContext对象。这就是为什么每个浏览器都有自己的缓存集,并且每个用户看到不同的时间。您可以将其设置为httpContext.cache并将缓存设置为当前应用程序域。 MSDN

无论如何都使用HttpRuntime.cache进行缓存,所以无论如何都要使用HttpRuntime.cache。

使用httpRuntime.cache MSDN

为当前应用设置缓存
HttpRuntime.Cache.Insert("GetIDList", sJSON, Nothing, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration)

还有另一个帖子here可以帮助解释httpContext.Cache和HttpRuntime.Cache更好一点。

我希望这会有所帮助。

答案 1 :(得分:0)

缓存存储在客户端的浏览器中,所以基本上你只是告诉服务器在调用insert方法时将缓存对象存储在用户的浏览器中。 MSDN有一些关于利用缓存的可靠文档:http://msdn.microsoft.com/en-us/library/xsbfdd8c.aspx

相关问题