Я пытаюсь кэшировать выходные данные JSON обработчика HTTP (НЕ страницы ASP.NET, поэтому директива OutputCache уровня страницы не применяется).Я использую IIS 7.5 в Windows Server 2008.
Я добавил строки в файл 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, config машины) для некоторого TTL 60 секунд, но я в растерянности.
Я подозревал, что мусорщик кеша может съедать мои записи в кеш при каждом запуске.Я изменил раздел реестра, чтобы мусорщик запускался реже;это не помогло.
Я также подозревал, что IIS чрезмерно очищает кэш, поскольку машина использует много физической памяти.Этот конкретный сервер имеет около 66% физической насыщенности оперативной памяти.Я попытался выделить статический объем (1 ГБ) для выходного кэша, вместо того, чтобы IIS управлял кэшем, но это также оказалось неудачным.
Я полагаю, что это тот же вопрос, который был задан вэта страница переполнения стека но тот парень так и не получил ответа.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Я наконец смог решить эту проблему, изменивЗначения реестра OutputCacheTTL и ObjectCacheTTL, как описано в этой очень полезной статье .Кажется, документация Microsoft довольно неполная.