2

我回到了 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: *

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

4

1 回答 1

1

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

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

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

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

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

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

于 2012-07-16T20:53:29.377 回答