我正在使用 c# MVC 4 并嵌入了一个报表查看器 aspx 页面来呈现来自 SSRS 的报表。我正在使用 Sql Server 2008R2,Microsoft.ReportViewer.WebForms 版本 11.0。
首先我面临的问题,
我在项目中使用会话变量来保存相对于站点的值。这些与 SSRS 无关,例如 UserId。
在 web.config 我有
注意:对于这个测试场景,超时设置得非常高。
同样,我已将 ReportServer 数据库中的 SessionTimeout 键的 ConfigurationInfo 更新为 60(又是一个荒谬的测试值)。
我的 ReportViewer 代码如下打开:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportViewer1.Reset();
string Reportpath = Request["ReportName"];
string ServerUserName = ConfigurationManager.AppSettings["ReportServerUser"];
string ServerPassword = ConfigurationManager.AppSettings["ReportServerPwd"];
string ReportServerDomain = ConfigurationManager.AppSettings["ReportServerDomain"];
string ReportsPath = ConfigurationManager.AppSettings["ReportsPath"];
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
// Get report path from configuration file
ReportViewer1.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportServer"]);
ReportViewer1.ServerReport.ReportPath = String.Format(ReportsPath + "/" + Reportpath);
IReportServerCredentials irsc = new CustomReportCredentials(ServerUserName, ServerPassword, ReportServerDomain);
ReportViewer1.ServerReport.ReportServerCredentials = irsc;
ReportViewer1.ShowPrintButton = false;
#region Parameters for report
Microsoft.Reporting.WebForms.ReportParameter[] reportParameterCollection = new Microsoft.Reporting.WebForms.ReportParameter[1];
reportParameterCollection[0] = new Microsoft.Reporting.WebForms.ReportParameter();
reportParameterCollection[0].Name = "Example";
reportParameterCollection[0].Values.Add("Example");
ReportViewer1.ServerReport.SetParameters(reportParameterCollection);
#endregion Parameters for report
ReportViewer1.ServerReport.Refresh();
}
}
我面临的问题
当我登录时,我在会话中设置了值。当我打开报告时,报告会在一秒钟内正常执行并显示在页面上。
在幕后,我注意到报表服务器临时数据库中插入了一行,过期日期为 1 分钟后(使用我的配置)。
会话密钥被添加到我的
HttpContext.Current.Session.Keys
此时一切都很好,我什至关闭了报告页面。
此时我等待一分钟,这意味着会话在 ReportServerTempDB 中过期。
然后我导航到一个页面,该页面的操作使用 HttpContext.Current.Session 作为值。同样,此操作与报告无关。但是,当它尝试检索密钥时,出现以下错误
Microsoft.Reporting.WebForms.ReportServerException: The report execution <key> has expired or cannot be found. (rsExecutionNotFound)
我一直在谷歌搜索,但没有找到解决我的问题的有效解决方案,因为大多数人似乎都遇到过长时间运行的报告,其中报告会话在执行完成之前就超时了。
有任何想法吗?
如果需要更多信息,请发表评论,我会更新问题。
提前致谢