2013-07-10 2 views
1

У меня есть сайт, на котором есть обработчик (реализует IHttpHandler), который используется для создания динамических таблиц стилей. Он делает это, получая код цвета HTML из сеанса (на основе организации, частью которой является пользователь), и используя некоторый код (DotLess) для создания таблицы стилей с этим цветом, установленным в разных местах.Как кэшировать HttpHandler на основе переменной сеанса

Учитывая, что шаблон редко меняется, я решил, что кэширование в порядке, но я, конечно, должен сделать кеш зависимым от цвета, который я получаю вне сеанса.

Есть ли простой способ сделать выходное кэширование на основе этого значения? Я знаю, что могу сделать это на основе querystring и других вещей, но не уверен, что это можно сделать с таким значением сеанса. Другой альтернативой, конечно же, является создание моего собственного кода кеширования, но я бы не стал изобретать колесо ...

ответ

2

Вы можете сделать ключ кеша для кэширования вывода, который включает в себя цвет как часть ключа ... " истинное "кэширование вывода выполняется на уровне ядра перед обработчиком, и поэтому было бы сложно реализовать на уровне обработчика способ изменения ключа по запросу.

Почему бы не использовать статический, правильно защищенный потоком (через замки) Словарь ... Где ключ - это цвет, а значение - содержимое CSS? Статический объект будет жить до завершения домена приложения. Вы можете использовать элемент статического поля HttpHandler в самом обработчике для выполнения кэширования. Busting указанный кеш становится таким же простым, как очистка или повторная инициализация ссылки на статические поля.

+1

Да, думая о том, что вы сказали о выходе кэширования, прежде чем оно попадет в обработчик, имеет смысл, что вы не можете сделать это из самого обработчика. Я могу только надеяться, хотя ... :) – Chris

+0

Есть способы сделать это в .NET 4.0 - внедрение специализированного поставщика кэширования вывода ... но это WAY overkill по сравнению со статическим словарем. – Haney

+1

Да, это определенно излишне, но интересная мысль, чтобы рассмотреть, если мне это нужно в будущем. – Chris

Смежные вопросы