我有一个有效的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)
我错过了什么?
答案 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