我正在尝试缓存HTTP处理程序的JSON输出(不是ASP.NET页面,因此页面级OutputCache指令不适用)。我在Windows Server 2008上运行IIS 7.5。
我已经在Web.config中添加了行以在用户模式下启用缓存(不是内核模式,因为我需要身份验证):
<system.webServer>
<caching enabled="true" enableKernelCache="false">
<profiles>
<!-- cache content according to full query string for 12 hours -->
<add varyByQueryString="*" duration="12:00:00" policy="CacheForTimePeriod" extension=".aspx" />
</profiles>
</caching>
<urlCompression dynamicCompressionBeforeCache="true" />
</system.webServer>
<location path="Content">
<system.webServer>
<!-- cache content that's requested twice in 30 minutes -->
<serverRuntime enabled="true" frequentHitThreshold="2" frequentHitTimePeriod="00:30:00" />
</system.webServer>
</location>
内容 成功缓存,但只能生存60秒。我已经查看了各种配置文件(Web.config,applicationHost.config,机器配置)以获得60秒的某种TTL,但我很茫然。
我怀疑缓存清除程序每次运行时都可能正在吃缓存条目。我修改了注册表项,因此清除程序运行频率较低;这没有帮助。
我还怀疑IIS过度清理缓存,因为该机器正在使用大量的物理RAM。此特定服务器具有约66%的物理RAM饱和度。我试图将静态数量(1 GB)分配给输出缓存,而不是允许IIS管理缓存,但这也是不成功的。
我认为这与问on this Stack Overflow page的问题相同,但那家伙从来没有得到答案。
提前致谢。
编辑:我终于能够通过修改OutputCacheTTL和ObjectCacheTTL注册表值来解决此问题,如this very helpful article中所述。似乎Microsoft文档相当不完整。