Службы отчетов | Остановить кэширование

#c# #asp.net #reporting-services #cache-control

#c# #asp.net #службы reporting-services #управление кэшем #службы отчетов

Вопрос:

сегодня получил действительно забавное сообщение от моего босса. У нас есть веб-сайт asp, который использует Microsoft.Reporting.WebForms.компонент ReportViewer и все остальное прекрасно. Однако, если браузер (в настоящее время тестируется с IE9) настроен на постоянное использование кэшированных страниц (Сервис-> Свойства обозревателя-> Вкладка Общие-> История просмотров-> Настройки-> Проверить наличие более новых версий сохраненных страниц -> Никогда), то по какой-то богом забытой причине браузер всегда использует кэшированный отчет. Microsoft да, что ты можешь с ними сделать.

Чтобы было понятно, у отчетов есть некоторые параметры, которые вводятся пользователем, и они выполняются правильно с первого раза. Если пользователь затем изменяет параметры и снова нажимает Просмотреть отчет, экран мерцает и делает все, чтобы выглядело так, как будто он генерирует новый отчет, но отображается тот же отчет (т. е. для генерации отчета снова используются исходные параметры, а не новые). Текстовые поля, в которые вводятся параметры (часть rdl), содержат правильные значения, просто сам отчет их не обновляет.

Я попытался добавить следующий javascript на страницу, на которой размещен элемент управления reportviewer:

     <%
    Response.Cache.SetNoStore();
    Response.Expires = 0; 
    Response.CacheControl = "no-cache";
    %>
  

и следующий c # для функции page_load страницы хостинга:

         this.Response.Cache.SetNoStore();
        this.Response.Expires = 0;
        this.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
        this.Response.AddHeader("pragma", "no-cache");
        this.Response.AddHeader("cache-control", "private");
        this.Response.CacheControl = "no-cache";
  

безуспешно. Кто-нибудь знает, как принудительно обновить браузер, несмотря на настройку истории браузера?

Комментарии:

1. Реальный вопрос в том, кто в здравом уме будет использовать Check for newer versions of stored pages->Never

Ответ №1:

Добавление «rs: ClearSession= true» к запросу помогло мне. Взято из здесь

Ответ №2:

Предполагая, что вы используете GET для генерации отчета, все, что вам нужно сделать, это сделать URL уникальным. Обычно я делаю это с помощью DateTime.Now.Ticks

Поэтому, когда вы меняете параметры, просто добавьте дополнительный параметр в строку запроса (теоретически, это должно работать и с POST). Что-то вроде url ="amp;timestamp=" DateTime.Now.Ticks

Комментарии:

1. Я не использую GET или POST. При первом вызове отчета используется метод report viewers refresh (), но после этого я нажимаю кнопку просмотра отчета в элементе управления представлением отчета, и он вообще не проходит через мой код…