0

你好,

我对NLB production environment配置两个应用程序服务器的位置有疑问。两者都有一个使用页面在 iframeReportViewer中呈现的虚拟目录。SSRS reports.aspx

在“ASP.NET 会话已过期或找不到”错误后,我更改了sessionState mode=SQLServer自定义数据库,但错误仍然存​​在。我也可以在数据库表中看到会话条目。

还能缺少什么?

- 我在某处读过,拥有一个_ (underscore)in 域名可能会导致这种情况。我检查了 URL,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" />

任何帮助我指出正确方向的帮助将不胜感激。谢谢 :)

4

1 回答 1

1

在使用 SSRS 的 NLB 场景中,您需要考虑的主要事情是 ViewState。如果用户访问负载平衡 URL,他们的流量可能会流向负载平衡器池中的任何 SSRS 服务器。您需要在所有 SSRS 服务器上设置相同的机器密钥,以允许任何服务器获取它们的会话。

我在下面的 SQLShack 帖子中写了所有必需的步骤。只要 SSRS 是这样设置的,前端就不会知道/关心你给它一个(负载平衡的)URL 来命中的事实。希望有帮助!

https://www.sqlshack.com/scaling-out-reporting-services-changes-in-sql-server-2016/

于 2017-10-23T09:01:13.293 回答