跨Web应用程序清除ASP.NET OutputCache

时间:2009-09-15 03:42:42

标签: asp.net asp.net-mvc outputcache

是否可以从另一个asp.net Web应用程序中清除一个asp.net Web应用程序的输出缓存?

原因是......我们有几个wep应用程序,结构如...

/ area1 /和/ area2 /中的页面被缓存并通过/ intranet / cms /进行管理。当使用/ intranet / cms /编辑页面时,我想将其从相应的/ area#/ application中的缓存中清除。

我已经尝试过使用VaryByCustom查找存储在HttpContext.Cache中的guid,但似乎每个Web应用程序都会缓存它,但这不起作用。

真的,如果在单个服务器上的Web应用程序之间有任何传递数据的方式,这将解决我的问题,因为我可以使用+ VaryByCustom。

谢谢!

-Mike Thomas

2 个答案:

答案 0 :(得分:3)

过去我这样做的方法是拥有一个“隐藏”页面(在每个/areaX网站中)进行刷新,重新加载等。页面验证共享的秘密查询参数在做任何事情之前(避免DoS攻击)。如果有效,则一旦操作完成,页面将输出“OK”消息;如果密钥无效,则会生成404错误。

如果您希望刷新基于每个项目或每个组,则添加标识该项目/组的第二个参数。

此方法也与服务器技术无关,如果需要,可以由其他管理工具触发。

答案 1 :(得分:2)

我知道这样做的一种方法是使用共享资源作为依赖项,通常是文件。更改文件后,将清除缓存。我认为您可以使用HttpResponse.AddFileDependency

但是,在这些情况下,通常最好使用进程外缓存,例如memcached。我自己没有测试过,但是这个link涉及将memcached与OutputCache一起使用。