2010-01-13 52 views
1

我有一个需要输出缓存的ASP.NET应用程序。当从Web服务返回的数据发生更改时,我需要使缓存的项目无效,所以简单的持续时间不够好。ASP.NET输出缓存 - 动态更新依赖关系

我一直在阅读有关缓存依赖关系的内容,并认为我有正确的想法。看起来我需要为我的Web服务创建一个缓存依赖项。

要使用这种依赖关系,我想我应该用下面的方法页输出关联:

Response.AddCacheItemDependency(cacheKey);

我正在努力的事情是我应该添加到缓存?

我的页面的依赖关系是由Web服务返回的单个值。我目前的想法是,我应该通过继承CacheDependency创建一个自定义缓存依赖关系,并将当前值存储在缓存中。然后我可以使用Response.AddCacheItemDependency来形成依赖关系。

然后,我可以定期检查值和NotifyDependencyChange以使我缓存的HTTP响应无效。

问题是,我需要确保缓存立即刷新,所以定期检查不够好。如何确保在从缓存中获取HTTP响应之前,在缓存中代表Web服务返回值的依赖对象被重新评估?

问候,科林·E.

回答

0

我相信你是正确的轨道缓存的依赖上。但是,如果您没有“定期检查”Web服务的返回值,您怎么知道它何时返回一个新值?您可能需要在另一个方向上设置Web服务,以便当其他系统中的值发生更改时,它可以调用您的系统并使旧缓存无效并粘贴新值。

+0

雷您好,感谢您的答复。网络服务电话价格低廉,每次请求页面时我都可以做。我需要知道的是,在我的ASP应用程序中,我应该进行此检查,它应该在服务器确定是否返回缓存响应之前发生。 – ColinE 2010-01-13 19:23:33

+0

那么,你可以在每个页面请求上做到这一点,但如果你有一个繁忙的网站,这似乎很浪费。如果通话费用低廉,您是否可以在缓存测试之间短暂停留(几秒钟)?或者,数据不是过时一秒钟的绝对必要? (当然,这些数据在某些时候会过时,因为它位于等待阅读的用户屏幕上。) – Ray 2010-01-13 20:23:37

0

可以使用手动无效缓存页面:

System.Web.HttpResponse.RemoveOutputCacheItem(path) 
+0

嗨,感谢您的信息 - 我没有意识到这一点。当用户请求页面时,在服务器检查缓存响应之前,是否有oppurtunity从缓存中删除页面?这将允许我在处理每个页面请求之前检查远程Web服务。 – ColinE 2010-01-13 19:25:07

+0

不,您必须在请求页面之前使缓存无效。通常情况下,您可以在数据更新时执行此操作 - 可以自动使用缓存依赖项,也可以手动使用上述代码。 – 2010-01-14 09:06:30