У меня есть RetrieveBlob.aspx, который получает некоторые переменные строки запроса и возвращает актив. Каждый URL соответствует уникальному объекту.
В RetrieveBlob.aspx задается профиль кэша. В Web.Config профиль выглядит так (в теге system.web:
<caching>
<outputCache enableOutputCache="true" />
<outputCacheSettings>
<outputCacheProfiles>
<add duration="14800" enabled="true" varyByParam="*"
name="AssetCacheProfile" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
Хорошо, это нормально работает. Когда я устанавливаю точку останова в коде RetrieveBlob.aspx, он срабатывает в первый раз, а во все остальные - нет.
Теперь я выбрасываю профиль кэша, и вместо этого у меня есть это в моем Web.Config в System.WebServer:
<caching>
<profiles>
<add extension=".swf" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".flv" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".gif" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".png" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".mp3" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpeg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
</profiles>
</caching>
Теперь кеширование больше не работает. Что я делаю не так? Можно ли настроить в теге кэширования System.WebServer профиль кэширования для страницы с динамическим aspx?
Я уже пробовал добавить что-то вроде этого:
<add extension="RetrieveBlob.aspx" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:00:30"
varyByQueryString="assetId, assetFileId" />
Но не работает.
Пример URL-адреса:
http: // {сервер} / {приложение} /trunk/RetrieveBlob.aspx?assetId=31809&assetFileId=11829
В <caching>
тег, который вы включили в web.config в разделе system.web
является специфичным для .net, и IIS 7 не будет обращаться к этому кэшируемому содержимому. Сейчас <caching>
вы были настроены в system.webServer
обрабатывается модулем IIS 7 и должен работать.
Если вы хотите включить кеширование для определенной страницы, например RetrieveBlob.aspx, вам нужно будет добавить его в <location>
тег например:
<location path="RetrieveBlob.aspx">
<system.webServer>
<caching>
<profiles>
<add extension=".aspx" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" varyByQueryString="assetId, assetFileId" />
</profiles>
</caching>
</system.webServer>
</location>
Самый простой способ сделать это с помощью пользовательского интерфейса IIS 7. Вот мой блог, в котором рассказывается о Проверка подлинности на уровне файлов в IIS 7, но вы можете сделать то же самое для кэширования вывода.
Иди в Интернет сайт (Веб-сайт по умолчанию в нашем случае)
Нажмите Просмотр содержания
Щелкните правой кнопкой мыши файл, например RetrieveBlob.aspx -> Перейти к просмотру функций
Двойной клик Кэширование вывода
Теперь нажмите Добавить... и внести необходимые изменения в кеширование