Назад | Перейти на главную страницу

Кэширование вывода с помощью IIS7 - как для динамической страницы aspx?

У меня есть 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 -> Перейти к просмотру функций
Двойной клик Кэширование вывода
Теперь нажмите Добавить... и внести необходимые изменения в кеширование