Кэширование ответа сервера ASP.NET HTTP и клиентской стороны - PullRequest
5 голосов
/ 11 марта 2010

Можно ли кэшировать ответ http-обработчика на сервере и на клиенте?

Кажется, это не помогает:

_context.Response.Cache.SetCacheability (HttpCacheability.Public); _context.Response.Cache.SetExpires (DateTime.Now.AddDays (7));

_context - это HTTPContext, передаваемый в качестве аргумента методу ProcessRequest в реализации IHttpHandler.

Есть идеи?

Обновление: клиент выполняет кэширование изображений, которые загружаются через httphandler, но если другой клиент делает тот же вызов, сервер не получает его в кэш. Таким образом, для каждого клиента, который запрашивает образ, сервер переходит в базу данных (и файловый поток). Если мы используем страницу aspx вместо httphandler вместе с профилем кэширования, то изображения кэшируются как на клиенте, так и на сервере.

Ответы [ 2 ]

4 голосов
/ 09 декабря 2010

С IIS7 это можно сделать в web.config.

Например, предположим, что ваш URL-адрес ashx:

/ ashxfiles / myhandler.ashx

... и вы хотите изменить параметры строки запроса:

id, lang

Добавьте в свой web.config следующее:

<location path="ashxfiles">
    <system.webServer>
        <caching>
            <profiles>
                <add extension=".ashx" policy="CacheForTimePeriod" duration="00:00:10" varyByQueryString="id, lang" />
            </profiles>
        </caching>
    </system.webServer>
</location>

Это правило применяется ко всем файлам .ashx в каталоге, поэтому вы можете поместить файлы .ashx в отдельные папки, если вам требуется более детальный контроль над настройками кэша.

3 голосов
/ 11 марта 2010

Спасибо за ваш ответ в комментариях.

Cache.SetCacheability используется, чтобы определить, разрешено ли кэшировать прокси или клиенту, а не на сервере.

Взгляните на IIS 7 , где объясняется, как кэшировать выходные данные обработчика HTTP на сервере.

...