2

问题
使用 SSRS,其默认 Report.aspx 和 webconfig、state1 和 state2(如下)是相等的。
我的自定义 report.aspx 对 webconfig、state1 和 state2 下面的修改不相等。

可能的原因
由于更改了 webconfig 选项,会话信息可能不会被存储..?
当我浏览报告,然后使用浏览器返回按钮时,这变得可见。

具体场景:

  1. 打开报告(具有参数/过滤器,例如年份:2012)
  2. 更改默认过滤器值,例如将年份设置为 2011 (+submit) [ = state1 ]
  3. 转到钻取报告
  4. 返回(年份再次设置为 2012 年)[ = state2 ]

使用默认的 SSRS report.aspx,按预期返回(步骤 4)是 2012 年。但是,使用我的自定义 webconfig+ReportViewer aspx,过滤器与以前不同(又是 2011 年)。

我对 web.config 的更改以绕过以前遇到的错误:

Microsoft.ReportingServices.UI.WebControlConnection、ReportingServicesWebUserInterface、Version=10.0.0.0、Culture=neutral、PublicKeyToken=89845dcd8080cc91 类型没有实现 IReportServerConnection

web.config 现在有:

<appSettings>
    <add key="ReportViewerServerConnection" value="Microsoft.ReportingServices.UI.WebControlConnection, ReportingServicesWebUserInterface, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <add key="ReportViewerTemporaryStorage" value="Microsoft.ReportingServices.UI.ReportViewerTemporaryStorage, ReportingServicesWebUserInterface, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    <clear/><!-- added -->
</appSettings>

要绕过错误:

在远程模式下,报表查看器控件需要启用会话状态或在配置文件中指定报表服务器连接信息。

我改变了:

<httpModules>
    <clear />
    <add name="Session"  type="System.Web.SessionState.SessionStateModule"/><!-- added -->
    ...
    ...
</httpModules>

我很高兴收到您的想法和/或建议/解决方案。

更新:
前面提到的步骤的附加屏幕截图:

第 1 步(= 第 4 步自定义)
第 1 步的参数设置

第 2 步(= 第 4 步默认,需要)
第 2 步的参数设置

第 4 步:使用默认 ssrs 返回给我第 2 步(根据需要),使用我的自定义给我第 1 步。我也希望通过我的自定义页面返回第 2 步。

使用 WebkitInspector更新调查

在 ssrs 默认 aspx 中,返回浏览器(所需功能):

最初过滤器也处于默认状态,但是服务器在页面上编写了额外的 JS,这会启动过滤器到先前设置的更新。关键是我不知道如何“自动”编写这些额外的 JS(我认为它与会话/历史相关,而不是以编程方式存储和检查历史)。

此外,有人建议我:

  1. 使用开发工具栏或提琴手/wireshark 来调查会话参数。
  2. 查询 ReportServerTempDb

我会尝试#1,但我真的不确定从哪里开始涉及#2。

更新:
显然仅在 IE 中,它有一些 BrowserNavigationCorrector.js。渲染页面时,首先会执行初始化,它会执行setTimeout('doInitialize',0). 之后 - 在执行 doInitialize 之前 - 页面写入/渲染 JS:add_init(*NavigationCorrectioncode*); 在 doInit 上,NavigationCorrector 检查 PageState (in OnAppLoad()),它还没有值“Loaded”。然后其他所有事情都会发生,并且页面状态将获得 Loaded 值。

然后,当您转到子报表并回击时,该页面在内存中的状态为“已加载”。因此,当 NavigationCorrector 执行其代码并且页面状态已加载时,它会触发 TriggerPostBack 脚本。反过来,这会执行更新参数值的回调。

使用 WebForms.dll v11,BrowserNavigationCorrector.js 不存在。此外,使用 Chrome,它也不包含在 SSRS 本机或使用 dll 中。

基本上我可以尝试手动包含该文件,或者,我目前正在尝试下载 VS2013,它希望有一个改进的 dll 版本,也许是 v12..?

4

1 回答 1

0

我认为这似乎是 DLL 中的一个错误。尝试制作一次票,但它在过程中的某个地方搁浅了。它可能已在较新的版本中得到修复。

于 2015-09-11T14:42:57.710 回答