【问题标题】:How to disable server-side caching on IIS 7.5 (asp net mvc3)如何在 IIS 7.5 (asp net mvc3) 上禁用服务器端缓存
【发布时间】:2011-11-28 17:46:18
【问题描述】:

我在 IIS 设置中遇到了关于缓存的问题,以下是我的问题的简要说明:

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

这就是问题所在,它在我的本地和集成环境(cassiini 和 iis 6)上运行良好,但在另一台机器上(2008r2/iis 7.5),显然有一个激进的服务器端缓存政策:

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

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

到目前为止,我尝试了 2 个解决方案:

从我的 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

【问题讨论】:

  • 在不知道您正在扩展引擎的情况下很难猜测:)
  • 我忘了在等式中添加,我不怀疑 MVC 可能会缓存视图分辨率本身。

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


【解决方案1】:

正如 Rick 所说,您需要先对此进行概要分析。一个快速的测试是实现一个无缓存控制器,正如我在这里概述的那样: Disable browser cache for entire ASP.NET website

【讨论】:

  • 我这样做了,没有任何变化,但是我注意到不知何故非移动版本占了上风,只要我加载页面的非移动版本,无论浏览器/计算机/手机如何,一切都会发生呈现为非桌面。
【解决方案2】:

如果您使用的是静态类型,例如图像等,您可以将其添加到您的 web.config 中

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

更新:

这是link

此链接详细说明了您想要做什么。

【讨论】:

  • 我想要静态内容缓存,问题是缓存动态页面。
  • 我在回答中添加了关于如何处理动态内容缓存的问题
  • 谢谢,这也是我正在阅读的内容,但似乎还不够。
【解决方案3】:

我认为您正在处理浏览器缓存。您是否分析了流量以查看 304?你可能追错了问题。

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

【讨论】:

  • 我在使用单独的浏览器时遇到了这个问题,这不包括浏览器缓存问题。 (browser2 是移动的,从非移动的 browser1 获取页面)
  • 您需要监视 HTTP 响应以了解发生了什么。在不同设备上直观地查看页面并不是很可靠。
  • 我正在尝试按照你的建议禁用 OutputCache,不幸的是我不知道如何在我的 android 上监控 HTTP 状态代码,但我在桌面上得到了 200s。
猜你喜欢
  • 2019-09-26
  • 2014-05-29
  • 1970-01-01
  • 2020-10-28
  • 2011-06-10
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多