【问题标题】:OutputCache has no effect输出缓存没有效果
【发布时间】:2012-07-16 16:23:13
【问题描述】:

我回到了 MVC 应用程序,我认为输出缓存按预期工作。但是,在重新访问它时,我发现我使用的 OutputCache 属性没有效果(Duration 设置为高值)。无论我是否添加它,我的操作中的断点总是会被命中,并且 Firebug 在每种情况下都会在请求的页面上向我显示 200 OK。

在我使用 VaryByCustom 的更复杂的操作中,从不调用 global.asax 中的 GetVaryByCustomString 方法。我知道它在过去被调用,因为我可以在那里调试,但现在不是。

我想知道我做了什么来打破这个......有什么想法吗?

(为了不仅测试 localhost,我使用了 dyndns.org 地址,使其成为有效的外部 URL。我还使用 IIS)。

更新:当我使用 localhost URL 时,定位相同的 url 不会再次输入操作代码。按F5可以。使用互联网 URL 时,它总是访问操作代码。

更新 2:Fiddler 在响应标头中显示:

200 OK

Cache:
Cache-Control: public, no-cache="Set-Cookie", max-age=86400
Date: Mon, 16 Jul 2012 19:38:46 GMT
Expires: Tue, 17 Jul 2012 19:38:46 GMT
Vary: *

Expires = Date + 24h 每次我请求相同的 url,这表明每次提供一个新页面。我也应该第一次得到 200,之后得到 304。

【问题讨论】:

  • OutputCache 属性是应用在控制器级别还是操作级别?
  • 在动作层应用。
  • 使用 fiddler 测试缓存并确保 web.config 反映发布
  • @RickAndMSFT 更新了答案。我不知道还要调查什么...

标签: asp.net-mvc asp.net-mvc-3 mobile outputcache 51degrees


【解决方案1】:

刚刚发现了罪魁祸首,这与我的应用程序相关:

如果我从我的应用程序中删除 51degrees.mobi nuget 包,它就会再次工作。把它放回去(即使不使用它的功能),缓存就死了。嗯,其实有2种情况:

  • 如果您只是添加包,则永远不会调用 GetVaryByCustomString。 action 方法被正确调用一次,然后从缓存中提供。
  • 如果添加包并且还使用 CompressFilter 属性,则永远不会调用 GetVaryByCustomString 并且始终调用操作方法(缓存中不提供页面)

我在他们的论坛上发帖报告这个问题。

更新:这些问题从 51degrees 版本 2.1.4.9 开始出现。我注意到这是第一个使用 Microsoft.Web.Infrastructure 的版本,以防万一……

更新 2:他们找到了导致此问题的原因并将修复。

【讨论】:

  • 刚刚遇到了这个确切的问题,因为我正在将缓存添加到使用该软件包旧版本的旧应用程序中。我无法想象如果没有你,我将如何将我的问题追溯到 51degrees.mobi。
  • @BrianCauthon 很高兴它帮助了 Brian!
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多