我最近尝试在 SharePoint 页面中使用报表查看器 Web 部件。这些报告多年来一直在 SharePoint 之外使用。我们目前处于 SSRS 2008 R2本机模式和 SharePoint 2007。一段时间后,当您转到带有 Web 部件的页面时,您会收到错误消息:
The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found. (rsExecutionNotFound)
而且,在 SSRS 日志中,您会得到:
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException: , An error occurred within the report server database. This may be due to a connection failure, timeout or low disk condition within the database.;
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Error in getting session data: Invalid or Expired Session: yoty4kmgk3hjr5uup1ng0a45
session!ReportServer_0-33!13bc!10/28/2013-11:09:45:: i INFO: LoadSnapshot: Item with session: yoty4kmgk3hjr5uup1ng0a45, reportPath: , userName: DOMAIN\USER not found in the database
library!ReportServer_0-33!13bc!10/28/2013-11:09:45:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: , Microsoft.ReportingServices.Diagnostics.Utilities.ExecutionNotFoundException: The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found.;
library!ReportServer_0-33!f84!10/28/2013-11:09:45:: i INFO: RenderForNewSession('/PATH/REPORT')
现在我确切地知道这是什么。我们一直得到这个。当您运行报表时,SSRS 会拍摄一个临时快照并将其与您的会话相关联,然后从快照呈现给浏览器。如果您允许报告在浏览器中打开足够长的时间,则会话超时并且临时快照被销毁。如果您返回并尝试与报告进行交互,您将收到此错误,因为会话已消失。在浏览器中发生这种情况时,您可以简单地返回报告管理器并重新运行报告以获取新会话和快照。
现在,我的创意团队正在处理 SharePoint 布局和设计。他们一直在使用至少三个不同的示例页面,每个页面在报表查看器 Web 部件的实例中托管相同的两个 SSRS 报表。当您最初将它们放在页面上时,它们会正常呈现。但是,SSRS 使会话过期后,Web 部件将显示未找到会话错误。每个页面为同一个报告建立不同的会话,因此将打开多个会话,并且报告将在一个页面上开始显示错误后继续呈现在另一个页面上。
该消息是绝对正确的,会话不存在。会话是瞬态的,超时时间为 600 秒。这是预期的行为。那么为什么页面中的 Web 部件实例仍然保持死会话?如果您离开页面然后返回,或者刷新页面,为什么 SharePoint 报表查看器 Web 部件不执行报表并获取新的执行 ID?Web 部件是否不够智能,无法知道发生了什么?对实例生命周期是否有一些期望没有得到满足?
所以问题是:我们如何才能让 SSRS SharePoint Web 部件表现良好?在 SharePoint 上下文中,用户应该能够打开页面并与其中的内容进行交互,而不知道内容来自何处或如何到达那里,体验应该是无缝和透明的。在这种情况下,Web 部件在 SharePoint 服务器上缓存会话 [我猜] 因此,一旦 SSRS 终止会话,SharePoint 中的视图只会呈现错误,我们找不到刷新它的方法。
有没有办法解决这个问题?