【问题标题】:Clear ASP.NET OutputCache across web applications跨 Web 应用程序清除 ASP.NET OutputCache
【发布时间】:2009-09-15 03:42:41
【问题描述】:

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

原因是......我们有几个结构类似......的wep应用程序

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

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

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

谢谢!

-迈克·托马斯

【问题讨论】:

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


    【解决方案1】:

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

    如果您希望以每个项目或每个组为基础进行刷新,则添加第二个参数来标识该项目/组。

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

    【讨论】:

    • 好主意 - 我曾经(现在仍然)考虑这个问题。从“编辑”区域发出 http 请求(在我看来)不太理想,但它肯定会奏效。
    • 这是一个可行的解决方案,只要您不使用多个工作进程(Web Garden)。
    • @Badaro:好点,我必须记住那个。我目前不在网络花园中运行我的任何应用程序,而只是使用多服务器负载平衡。
    【解决方案2】:

    我知道的一种方法是使用共享资源作为依赖项,通常是文件。当文件改变时,缓存被清除。我认为您可以为此使用HttpResponse.AddFileDependency

    但是,在这些情况下,通常最好使用进程外缓存,例如 memcached。我自己没有测试过,但是这个link 处理的是使用 memcached 和 OutputCache。

    【讨论】:

    • 有趣的可能性。我不喜欢在服务器上冷却大量本质上“临时”的文件(因为我们希望能够使单个页面无效),但它似乎确实可行。由于这一切仍然在单个服务器上,因此设置外部缓存提供程序的额外管理开销并不值得,但 解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2010-09-21
    • 2017-02-10
    • 2015-10-28
    相关资源
    最近更新 更多