OutputCache пользовательского элемента управления не работает

У меня есть сложный веб-сайт, который использует кэширование вывода .NET, включенное через Sitefinity. Недавно нам нужно было, чтобы определенный пользовательский элемент управления имел разные кешированные версии в зависимости от местоположения пользователя. Поэтому я дал пользователю управление директивой OutputCache с набором VaryByCustom и переопределил метод GetVaryByCustomString в Global.asax, чтобы получить местоположение пользователя. Проблема в том, что даже в простом тестовом примере это не работает. Мы протестировали этот вариант использования вне контекста Sitefinity, чтобы проверить, не является ли он причиной проблемы, создав новый проект, содержащий страницу .aspx и поместив в него новый пользовательский элемент управления .ascx. На странице есть метка, которая получает текущее время загрузки, а также элемент управления. Элемент управления также имеет метку, отображающую текущее время. Если я дам странице OutputCache установить это:

<%@ OutputCache Duration="60" VaryByParam="none" %>

и элемент управления установлен на это:

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

ожидаемая функциональность не происходит. Мысль заключалась в том, что если мы откроем эту страницу в двух разных браузерах, мы увидим два разных времени во второй метке. Я что-то здесь совсем пропустил? Я новичок в кэшировании .NET, поэтому это вполне возможно.

Спасибо

Вот мое переопределение GetVaryByCustomString:

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom == "custom")
        {
            // return custom logic
        }
        else
        {
            return base.GetVaryByCustomString(context, custom);
        }
    }

person rpf3    schedule 15.06.2012    source источник
comment
Чтобы быть на 100% уверенным, под двумя разными браузерами вы подразумеваете две разные версии браузера, верно?   -  person Claudio Redi    schedule 16.06.2012
comment
Я открыл его в Chrome и IE8 и получил ту же кешированную версию.   -  person rpf3    schedule 16.06.2012


Ответы (1)


Если вы используете

  <%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

Тогда кеш должен быть разным для каждого браузера с разной основной версией + типом браузера. Таким образом, Firefox 3.5.0 и Firefox 3.6.0 должны видеть одинаково, но Firefox 3.5 и Firefox 2.0 должны видеть по-разному.

Я предполагаю, что вы случайно не перегрузили HttpApplication.GetVaryByCustomString в global.asmx для обработки браузера вместо того, чтобы позволить .NET сделать это?

person John Mitchell    schedule 16.06.2012
comment
нет, единственное, что у меня было в перегрузке, это проверка, было ли это нашим кастомным значением, иначе я вернул управление базовому методу - person rpf3; 16.06.2012