使用 SharePoint 报表查看器 Web 部件:获取会话数据时出错:会话无效或过期:xxxxxxxxxxx
Posted
技术标签:
【中文标题】使用 SharePoint 报表查看器 Web 部件:获取会话数据时出错:会话无效或过期:xxxxxxxxxxx【英文标题】:Using SharePoint Report Viewer Web Part: Error in getting session data: Invalid or Expired Session: xxxxxxxxxxx 【发布时间】:2013-11-13 06:30:45 【问题描述】:我最近尝试在 SharePoint 页面中使用报表查看器 Web 部件。这些报告多年来一直在 SharePoint 之外使用。我们目前处于 s-s-rS 2008 R2 本机模式和 SharePoint 2007。一段时间后,当您转到带有 Web 部件的页面时,您会收到错误消息:
The report execution yoty4kmgk3hjr5uup1ng0a45 has expired or cannot be found. (rsExecutionNotFound)
而且,在 s-s-rS 日志中,您会得到:
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')
现在我确切地知道这是什么。我们一直得到这个。当您运行报表时,s-s-rS 会拍摄一个临时快照并将其与您的会话相关联,然后从快照呈现给浏览器。如果您允许报告在浏览器中打开足够长的时间,则会话超时并且临时快照被销毁。如果您返回并尝试与报告进行交互,您将收到此错误,因为会话已消失。在浏览器中发生这种情况时,您只需返回报表管理器并重新运行报表即可获取新会话和快照。
现在我的创意团队正在处理 SharePoint 布局和设计。他们一直在使用至少三个不同的示例页面,每个页面都在报表查看器 Web 部件的实例中托管相同的两个 s-s-rS 报表。当您最初将它们放在页面上时,它们会正常呈现。但是,s-s-rS 使会话过期后,Web 部件将显示未找到会话错误。每个页面为同一个报告建立不同的会话,因此将打开多个会话,并且报告将在一个页面上开始显示错误后继续在另一个页面上呈现。
消息绝对正确,会话不存在。会话是瞬态的,超时时间为 600 秒。这是预期的行为。那么为什么页面中的 Web 部件实例仍然保持死会话?如果您离开页面然后返回,或者刷新页面,为什么 SharePoint 报表查看器 Web 部件不执行报表并获取新的执行 ID? Web 部件是否不够智能,无法知道发生了什么?是否存在未满足的实例生命周期预期?
所以问题是:我们如何才能使 s-s-rS SharePoint Web 部件表现良好?在 SharePoint 上下文中,用户应该能够打开页面并与其中的内容进行交互,而不知道内容来自何处或如何到达那里,体验应该是无缝和透明的。在这种情况下,Web 部件会在 SharePoint 服务器上缓存会话 [我猜],因此一旦 s-s-rS 终止会话,SharePoint 中的视图只会呈现错误,我们找不到刷新它的方法。
有没有办法解决这个问题?
【问题讨论】:
【参考方案1】:尝试增加 s-s-rs 超时。我面临同样的问题,因为我在我的 asp.net Web 应用程序中使用 s-s-rs url 来生成报告。如果我将页面打开一段时间然后再返回,我会收到与“报告执行已过期”相同的错误。我尝试了不同的选项,包括将 &rc:UniqueGuid= newguid 添加到 s-s-rs url,但没有帮助。
【讨论】:
以上是关于使用 SharePoint 报表查看器 Web 部件:获取会话数据时出错:会话无效或过期:xxxxxxxxxxx的主要内容,如果未能解决你的问题,请参考以下文章
在 SharePoint2010 中使用 XML 查看器取得其他站点的内容列表
MVCReportViewer :报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager