#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 (), но после этого я нажимаю кнопку просмотра отчета в элементе управления представлением отчета, и он вообще не проходит через мой код…