【发布时间】: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