如何在IIS 7.5上禁用服务器端缓存(asp net mvc3)

时间:2011-11-28 17:46:18

标签: asp.net asp.net-mvc asp.net-mvc-3 iis iis-7.5

我正在努力解决有关缓存的IIS设置问题,以下是我的问题的简要说明:

我正在建立一个移动和非移动网站,共享相同的控制器。 IE:mysite / page将提供mysite / page.cshtml或mysite / M / page.cshtml,具体取决于设备。

这是捕获,它在我的本地和集成环境(cassiini和iis 6)中运行良好,但在另一台机器(2008r2 / iis 7.5)上,显然有一个积极的服务器端缓存策略:

  • 如果我从台式机访问网站,我有正确的页面(桌面版)
  • 如果现在我使用我的手机访问该网站,我将拥有桌面版本(这意味着服务器端缓存,我的手机没有使用相同的网络)。

相反,如果我首先使用手机重新启动服务器并访问该网站,那么我将在我的桌面上获取移动版本(仅适用于我当前访问过的网页)。

到目前为止,我尝试了两种解决方案:

从我的Web.config中禁用OutputCache:

<httpModules>
  [..]
  <remove name="OutputCache" />
</httpModules>

在IIS的“我的网站”的“输出缓存”中取消选中“启用输出缓存”。

让我烦恼的是我的其他服务器(iis 6.0)没有这个问题,虽然在这个服务器上启用了缓存,这让我觉得它与iis 7缓存添加有关。

我的问题很简单:如何在IIS 7.5上禁用服务器端缓存?

提前感谢您的iis灯!

找到它了!

对不起那些你真的猜不到那个,我扩展了RazorViewEngine(实际上我使用的是一个示例移动mvc3模板应用程序),而这个类重写了FindView,它应该考虑到useCache参数,但显然无论如何我配置IIS,它与iis7设置为true。我到处都把它设置为假。我明天会考虑适当调整该参数。

public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)

感谢您的帮助,我现在已经很好地理解了IIS的所有缓存可能性;)。有趣的是,这与IIS 7.0的行为不同(IIS6和Cassiini是一致的)。

编辑:

更多信息:http://aspnet.codeplex.com/workitem/8201?PendingVoteId=8201,它与FindView的调试/发布工作有关。

这是我的确切问题:http://aspnet.codeplex.com/workitem/8201?PendingVoteId=8201

3 个答案:

答案 0 :(得分:1)

如果您正在谈论静态类型(如图像等),可以将其添加到web.config

 <staticContent>
  <clientCache cacheControlMode="DisableCache"/>
</staticContent>

更新

这是link

此链接详细讲述了您想要做的事情。

答案 1 :(得分:1)

正如里克所说,你需要先对此进行分析。然而,快速测试是实现无缓存控制器,如下所述: Disable browser cache for entire ASP.NET website

答案 2 :(得分:0)

我认为你正在处理浏览器缓存。你有没有想过看到304s的流量?你可能正在追逐错误的问题。

注意:您的缓存清除解决方案必须包括客户端和服务器端。