【发布时间】:2018-03-31 10:36:18
【问题描述】:
嗨,
我在NLB production environment 上遇到了一个问题,其中配置了两个应用程序服务器。两者都有一个ReportViewer 的虚拟目录,它使用.aspx 页面在iframe 中呈现SSRS reports。
“ASP.NET 会话已过期或找不到”错误后,我用自定义数据库更改了sessionState mode=SQLServer,但错误仍然存在。我也可以在数据库表中看到会话条目。
还可能缺少什么?
-我在某处读到过在域名中有_ (underscore) 会导致这种情况。我检查了网址,querystring 参数中有一个下划线但没有域名本身,并且查询字符串是由ReporViewer ScriptResource.axd 本身自动生成的。
-KeepSessionAlive 也是如此,AsyncRendering 也是如此,在这两种状态下都检查了这些,问题没有得到解决。
-cookieless 设置为“假”
-ReportViewer 版本如下:
<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=xx" />
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=xx" />
任何能帮助我指出正确方向的帮助将不胜感激。 谢谢 :)
【问题讨论】:
-
域名中有一个破折号'-',这会是问题的原因吗?
-
是您的客户端应用程序或 ssrs 页面中的会话超时,还是两者兼而有之?
-
Reportviewer 控件的 Scriptresource.axd 进行 xhr 调用并得到会话超时错误作为响应。客户端应用程序本身没有会话管理,它只是一个带有 reportviewr 控件的 aspx 页面,该客户端应用程序的 webconfig 包含我认为默认情况下用于 ssrs 会话的 sessionState mode=SqlServer 标签,如果我错了,请纠正我。
-
第一次打开reportviewer时,通过两个节点的localhost检查,在aspstate db中创建了一个新的会话条目,这意味着两个节点都可以到达aspstate DB,然后随机会话没有发生发现或过期错误,这可能是在第 3-4 次点击或在第 20-25 次点击之后,没有设置模式。
-
报表服务器有全局响应超时,每个报表在ssrs中都有超时设置。但是,如果我记得那些返回为“报告处理超时”而不是“会话超时”。我会坚持你的假设。这是我试图解释的链接。 stackoverflow.com/questions/21011759/…
标签: reporting-services ssrs-2008 reportviewer nlb sql-session-state