IIS 7.5 上的 ASP.NET 4 应用程序中的输出缓存有一些奇怪的行为。我已经能够简单地在其他空设置上重复该问题,我确定这是一个错误,但不确定如何向 Microsoft 报告。
IIS 中的站点响应多个域,.NET 应用程序检查主机名,并相应地生成内容。例如,它可能会在空白页中打印请求 URL 的名称。例如,www.first-domain.com 和 www.second-domain.com
web.config 在 system.webServer 节点下有适当的缓存、urlCompression 和 httpCompression 全部关闭。
aspx 页面为 public 设置缓存控制标头,带有一个未来的到期日期,或者一个 max-age 值。
访问 www.first-domain.com 输出成功写入 'www.first-domain.com' 的页面。
但是,访问 www.second-domain.com 会输出一个写有“www.first-domain.com”的页面。
检查失败的请求跟踪,System.Web.Caching.OutputCacheModule 找到了缓存的输出(即使 .config 文件已关闭该功能),即使请求 URL 主机名不同,缓存也已匹配,因此只要设置了 max-age/expiry,第二个请求就会将第一个请求的结果输出到不同的域,然后才会出现第二个域的正确页面。
将缓存控制设置为私有,或删除 web.config 中的“OutputCache”模块可以解决问题,同时保持发送到浏览器的正确缓存控制标头,但显然,我无法利用内核缓存我需要它。
我找不到任何有关如何配置 OutputCacheModule 的 MSDN 文档。
有没有其他人遇到过这个问题,我该如何启用内核缓存并让它考虑 URL 主机名(而不将应用程序分隔到 IIS 中的不同站点)。
谢谢。
更新:
添加 SetSlidingExpiration 无效,因为无论请求主机名如何,内核缓存仍会缓存输出。现在唯一的方案是禁用输出缓存,或者在将运行的每个域上运行应用程序的重复实例 - 考虑到服务器性能下降,这将导致与使用输出缓存获得的性能提高相比,我们决定禁用此应用程序的输出缓存。