【问题标题】:Reporting Services | Stop Caching报告服务 |停止缓存
【发布时间】:2011-06-13 16:51:37
【问题描述】:

今天从我的老板那里得到了一个非常有趣的东西。我们有一个使用 Microsoft.Reporting.WebForms.ReportViewer 组件的 asp 网站,一切都很可爱。但是,如果浏览器(当前使用 IE9 进行测试)设置为始终使用缓存页面(工具->Internet 选项->常规选项卡->浏览历史记录->设置->检查存储页面的较新版本->从不),由于某种上帝遗弃的原因,浏览器总是使用缓存的报告。微软啊,你能用它们做什么。

需要明确的是,报告有一些由用户输入的参数,并且第一次运行正确。如果用户随后更改参数并再次单击查看报告,则屏幕闪烁并执行所有操作以显示好像正在生成新报告但显示相同的报告(即再次使用原始参数而不是新的参数来生成报告那些)。输入参数的文本框(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";

没有成功。尽管有浏览器历史设置,有谁知道如何强制浏览器更新?

【问题讨论】:

  • 真正的问题是,谁会使用Check for newer versions of stored pages-&gt;Never

标签: c# asp.net reporting-services cache-control


【解决方案1】:

在查询中添加“rs:ClearSession=true”对我有帮助。 取自here

【讨论】:

    【解决方案2】:

    假设您使用 GET 来生成报告,您所要做的就是使 URL 唯一。我通常使用DateTime.Now.Ticks来做到这一点

    因此,当您更改参数时,只需在查询字符串中添加一个额外的参数(理论上,应该也可以与 POST 一起使用)。类似url+="&amp;timestamp="+DateTime.Now.Ticks

    【讨论】:

    • 我没有使用 GET 或 POST。第一次调用报表时,它使用报表查看器 refresh() 方法,但之后我在报表视图控件中按下查看报表按钮,它根本不通过我的代码...
    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2011-06-24
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-07
    相关资源
    最近更新 更多