您好,
我在NLB production environment
上遇到了一个问题,即配置了两个应用服务器。两者都有一个ReportViewer
虚拟目录,使用SSRS reports
页面在iframe中呈现.aspx
。
在“ASP.NET会话已过期或无法找到”错误后,我使用自定义数据库更改了sessionState mode=SQLServer
,但仍然存在错误。我也可以在DB表中看到会话条目。
还有什么可以遗漏?
- 我已经读过某个地方,域名中有_ (underscore)
会导致这种情况。我检查过网址,querystring
参数中有下划线,但域名本身没有下划线,查询字符串由ReporViewer ScriptResource.axd
本身自动生成。
- KeepSessionAlive
也是如此& AsyncRendering
也是如此,在两个州检查了这些,问题没有得到解决。
- cookieless
设为“false”
-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" />
任何帮助指出我正确方向的人都将不胜感激。 谢谢:)
答案 0 :(得分:1)
使用SSRS在NLB场景中需要考虑的主要问题是ViewState。如果用户正在访问负载平衡URL,则其流量可以转到负载平衡器池中的任何SSRS服务器。您需要在所有SSRS服务器上设置相同的机器密钥,以允许任何服务器接收其会话。
我在下面的SQLShack帖子中写了所有必需的步骤。只要SSRS设置为这样,前端就不会知道/关心你正在给它一个(负载平衡的)URL。希望有所帮助!
https://www.sqlshack.com/scaling-out-reporting-services-changes-in-sql-server-2016/