OutputCache无效

时间:2012-07-16 16:23:14

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

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

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

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

(为了不仅测试localhost,我使用dyndns.org地址,这是一个有效的外部URL。我也使用IIS。)

更新:当我使用localhost网址时,定位相同的网址不会再次输入操作代码。击中F5会。使用互联网网址时,它始终会访问操作代码。

更新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。

1 个答案:

答案 0 :(得分:1)

刚刚发现了罪魁祸首,这是我的申请的背景:

如果我从我的应用程序中删除了51degrees.mobi nuget包,它就会再次运行。把它放回去(即使没有使用它的功能),缓存已经死了。嗯,实际上有两种情况:

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

我发布到他们的论坛报告此问题。

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

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