Reporting services SSRS报表查看器-ASP.Net会话已过期或在NLB(SQL Server)上找不到

Reporting services SSRS报表查看器-ASP.Net会话已过期或在NLB(SQL Server)上找不到,reporting-services,ssrs-2008,reportviewer,nlb,sql-session-state,Reporting Services,Ssrs 2008,Reportviewer,Nlb,Sql Session State,你好, 我对NLB生产环境有一个问题,其中配置了两个应用程序服务器。两者都有一个虚拟目录ReportViewer,使用.aspx页面在iframe中呈现SSRS报告 “ASP.NET会话已过期或找不到”错误后,我使用自定义数据库更改了sessionState mode=SQLServer,错误仍然存在。我也可以在DB表中看到会话条目 还有什么遗漏? -我在某个地方读到过,域名中有一个(下划线)会导致这种情况。我已经检查了URL,在querystring参数中有一个下划线,但域名本身没有,并且qu

你好,

我对NLB生产环境有一个问题,其中配置了两个应用程序服务器。两者都有一个虚拟目录
ReportViewer
,使用
.aspx
页面在iframe中呈现
SSRS报告

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

还有什么遗漏?

-我在某个地方读到过,域名中有一个
(下划线)
会导致这种情况。我已经检查了URL,在
querystring
参数中有一个下划线,但域名本身没有,并且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" />


如果您能帮我指出正确的方向,我们将不胜感激谢谢:)

在使用SSR的NLB场景中,您需要考虑的主要问题是ViewState。如果用户访问的是负载平衡的URL,那么他们的流量可能会到达负载平衡器池中的任何SSRS服务器。您需要在所有SSRS服务器上设置相同的machinekey,以允许任何服务器拾取其会话

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


域名中有一个破折号“-”,这可能是问题的原因吗?是您的客户端应用程序或ssrs页面中的会话超时,还是两者都超时?reportviewer控件的Scriptresource.axd进行xhr调用,并得到会话超时错误的响应。客户端应用程序本身没有会话管理,它只是一个带有reportviewr控件的aspx页面,该客户端应用程序的webconfig包含sessionState mode=SqlServer标记,我认为默认情况下该标记用于ssrs会话,如果我错了,请纠正我。通过两个节点的localhost进行检查,当reportviewer第一次打开时,在aspstate db中创建一个新的会话条目,这意味着两个节点都可以到达aspstate db,然后随机出现会话未找到或过期错误,这可能是在第3-4次命中或第20-25次命中之后,没有设置模式。报表服务器有一个全局响应超时,每个报表在ssrs中都有一个超时设置。然而,如果我还记得的话,这些都是“报告处理超时”而不是“会话超时”。我会坚持你的假设。这是我试图解释的一个链接。好的,NLB指的是应用服务器(IIS)NLB,而不是NLB上的SSRS报表服务器。我现在还不确定,因为我目前没有生产服务器访问权限。不过,我也会检查一下,这只是一个简单的问题,我是否必须将IIS应用程序的web.config中使用的相同机器密钥也放在报表管理器的web.config中。另外,对于sessionState,我已经为这两个应用程序实现了SqlServer模式&而不是两个不同节点上的报表管理器,我是否也必须使用SqlServer对它们进行配置。谢谢你提供的有用链接。@zeppelin,啊,情况略有不同。对于机器密钥,我认为您可以将相同的机器密钥添加到所有服务器上的.NET文件夹中,该文件夹为该服务器上所有基于IIS的应用程序提供服务。我相信在这里您可以更改它:C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG对于SSRS报表管理器,您将需要扩展部署中的所有节点,共享相同的数据库。您希望他们使用IIS负载平衡或NLB共享单个URL。不过,他们可以使用各自的URL(即&)。这一切都取决于它的设置:)我检查了两个应用服务器(IIS)和两个报表服务器-这两个层都在NLB上-一切似乎都正常。两个IIS服务器和两个报表服务器都有同步的机器密钥。IIS服务器的SessionState=SQLServer,而报表服务器的SessionState=InProc。此外,错误显示“Asp.Net会话找不到或已过期”&我认为ReportServer没有使用Asp.Net会话管理,这使我相信错误来自包含.Net报表查看器控件的.aspx页面。你怎么说?我还应该检查什么?任何想法。很难想象你的环境。我想如果你把它全部去掉,只剩下SSR。只要设置了一种特定的方式,任何能够解决SSRS NLB url的问题都可以。所以如果SSRS有一个类似的URL。然后在NLB池中有Server1和Server2,SSR中的设置应如下:-ReportServer web.config:-rsReportServer.config:Reporting.company.com Reporting.company.com/ReportServer-向外扩展部署应包括这两个服务器。。。两台SSRS服务器中的web.config文件或Machine.config文件应包含相同的手动machinekey或自动生成选项。如果你有所有的设置,试着直接从URL点击SSR。浏览一些报告。这一切都有效吗。您需要使用它长达10分钟或更长时间,希望能够将您推到两台服务器之间(检查ExecutionLog3表)。您是否看到两台服务器都呈现报告。如果是这样,您的SSRS设置是金色的。问题在于您的应用程序服务器。到目前为止我能提供的最好的恐怕是:)希望能有所帮助