在IIS 7.5上的ASP.NET 4应用程序中,在输出缓存方面具有一些奇怪的行为。我已经能够仅在其他空设置上重复问题,我敢肯定这是一个错误,但不确定如何向Microsoft报告。

IIS中的一个站点响应了一个以上的域,.NET应用程序会检查主机名,并相应地生成内容。例如,它可以在空白页中打印请求URL的名称。例如,www.first-domain.com和www.second-domain.com

web.config具有适当的缓存,URLCOMPRESSION和HTTPCOMPRESSION。

ASPX页面为公共设置了缓存控制标头,其未来日期或最大值值。

访问www.first-domain.com输出成功写入“ www.first-domain.com”的页面。

但是,访问www.second-domain.com输出一个写入“ www.first-domain.com”的页面。

检查失败的重新测试轨迹,system.web.caching.outputcachemodule已找到缓存的输出(即使.config文件已关闭函数),即使请求url url hostname是不同的,也可以匹配缓存,因此也匹配了。第二请求将在将二阶的正确页面出现之前,将第一个请求的结果输出到不同域。

将缓存控制设置为私有,或在Web中删除“ outputcache”模块。CONFIG解决了问题,同时保持了发送到浏览器的正确的缓存控制标头,但是显然,我无法利用内核缓存时的优势我需要它。

我找不到有关如何配置OutputCachemodule的任何MSDN文档。

是否有人经历过这个问题,我该如何启用内核缓存并考虑到URL主机名(而不将应用程序分开到IIS中的不同站点)。

谢谢。

更新:

添加setSlidingExpiration无效,因为无论请求主机名如何,内核缓存仍然可以缓存输出。现在唯一的情况是禁用输出缓存,或在每个域上运行该应用程序的重复实例 - 考虑到服务器性能下降,这将导致与使用输出缓存时获得的性能的增加,我们决定禁用此应用程序的输出缓存。

有帮助吗?

解决方案

9个月后没有提供任何答案,也没有找到解决方案,只有解决方法,也许这将在下一版本的IIS大于7.5 ...中得到解决。

--

添加setSlidingExpiration无效,因为无论请求主机名如何,内核缓存仍然可以缓存输出。现在唯一的情况是禁用输出缓存,或在每个域上运行该应用程序的重复实例 - 考虑到服务器性能下降,这将导致与使用输出缓存时获得的性能的增加,我们决定禁用此应用程序的输出缓存。

其他提示

我的问题非常相似,这里没有解决方案对我有帮助。

tldr: :强行删除 OutputCache 模块 Web.config 是我发现的唯一解决方案。

我的情况有些不同。

我在 Application_BeginRequest, ,回答 Access-Control-Allow-Origin 对于给我打电话的特定主机(将其设置为 * 尚不可靠)。

我的控制器还设置了 Cache-control: public 因为它的回答。

我发现的

每当我设置时 Cache-control: public, ,IIS强行缓存了反应。两者的断点 Application_BeginRequest 或我的控制器从未第二次击中。

通过IIS管理器禁用输出和内核缓存 以下 会让我击中 Application_BeginRequest 断点,但从未让我进入控制器。有些东西仍在缓存。disabled output caching and kernel caching on inetmgr

本文 建议从IIS中删除OutputCache模块会有所帮助。

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="OutputCache" />
  </modules>
</system.webServer>

这样做可以让我击中控制器。

什么会有所帮助

如果MS的某人是否可以发光,是否有一种改变这种行为的方法。 OutputCache在应用程序的某些部分中可能很有用,而在其他地方则可能是不必要的。

谨防

也许我(我们是?)在这里解决了错误的问题。

也许在这种情况下,IIS正在接管缓存,因为它应该。在我的服务器和用户之间的途中,也许在这种确切情况下的行为,如果是这种情况,那么在IIS上解决此问题是错误的。我必须弄清楚,也许你也应该这样做。

我有类似的问题。我使用自定义URL重写器。我有页面example.com/articles and example.com/art-any_id.html。两个URL映射到articles.aspx(在第二个示例中为articles.aspx?id = any_id)。它与ASP.NET 2.0和经典管道模式合作正常。将其更改为ASP.NET 4和集成模式后,我们都有奇怪的行为:两个URL返回相同的输出。它是任何页面,例如example.com/art-any_id.html。

现在我们删除了 <add extension=".html" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" /> 从部分 <caching enabled="true" enableKernelCache="true"> 而且很好。我不明白为什么http.sys缓存它。

您找到了任何解释吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top