Asp.net 如何使用SQL Server Reporting Services防止代理超时

Asp.net 如何使用SQL Server Reporting Services防止代理超时,asp.net,sql,reporting-services,proxy,Asp.net,Sql,Reporting Services,Proxy,我们有一个运行Windows Server 2008R2 x64和SQL Server 2008R2 x64的系统,其中安装/配置了SSR。这是一个供许多人使用的共享报告服务器,有一些相当大的低效数据库(400-500gb的数据),这些用户使用该系统根据位于上述数据库之上的报告模型生成临时报告。请注意,用户正在使用NTLM登录并标识正在运行的报告 大多数报告都是快速的,但如果您运行的报告包含1或2年的数据,则返回报告可能需要一段时间(5分钟)。这对大多数用户来说是好的,但是有些用户被困在一个代理

我们有一个运行Windows Server 2008R2 x64和SQL Server 2008R2 x64的系统,其中安装/配置了SSR。这是一个供许多人使用的共享报告服务器,有一些相当大的低效数据库(400-500gb的数据),这些用户使用该系统根据位于上述数据库之上的报告模型生成临时报告。请注意,用户正在使用NTLM登录并标识正在运行的报告

大多数报告都是快速的,但如果您运行的报告包含1或2年的数据,则返回报告可能需要一段时间(5分钟)。这对大多数用户来说是好的,但是有些用户被困在一个代理后面,该代理的连接超时设置为2分钟。由于SSRS 2008R2似乎没有发送回“保持活动”信号(通过wireshark确认),当运行其中一个长报告时,代理服务器认为连接已断开,因此它只是放弃并终止连接。这会给用户一个401或503错误,显然会取消报告(错误错误是SSRS中的一个已知错误,Microsoft拒绝修复)

尽管这不是我们的问题,但我们从用户那里得到了很多批评,所以我正在寻找一个创造性的解决方案

到目前为止,我提出了:

1) 正在为SSR发现一些未知的设置,这些设置可以使连接保持活动状态。
2) 在用户和报表服务器之间安装我们自己的代理,这将返回一个keep-alive(不确定这是否会起作用,这有点黑客,只是创造性地思考!)
3) 重新编写我们的报表数据库以提高效率(是的,这是最好的解决方案,但也非常昂贵)
4) 询问专家:):)

我们与微软技术支持部门预约了一个电话,看看他们是否能提供帮助,但是Stack上的专家能帮我们吗?我知道这可能是一个更好的服务器故障问题(我可能会在那里发布),但这也是一个开发问题,真的:)

谢谢

有几件事:

A.对于SSR的整体it服务:

我个人使用keep-alive服务,因为我认为SSRS服务器的默认回收时间为12小时。我使用了一种被人介绍给我的叫做“VisualCron”的工具,它可以自动完成许多任务流程。您也可以在WCF服务或类似服务中拨打电话。基本上,我知道用户当天的第一份报告通常很慢。通常需要点击http://(servername)/ReportServer使其保持活动状态

B.对于cachine报告级项目:

如果这没有帮助,我建议可能的话缓存数据集。有些人有最新的数据,但对很多人来说,情况并非如此。您可以在SSRS中创建共享数据集,然后按计划缓存该数据集。所以,如果您有类似于域的表,这些表只需要每隔一个月更新一次,请将它们放在那里。夜间或成批存储的数据也是如此。如果你是一家基于交易的商店,这对目前来说可能没有帮助,但对于基于批量的企业来说,这会有很大帮助

您还可以缓存报告中的数据,作为此操作的延续。在报告的“管理”下拉列表下,当在/Reports登录页中时,您可以将数据设置为在特定计划下运行。您还可以设置快照,该快照是此快照的扩展,因为它使用计划中设置的一些默认参数执行,并且是运行时报告的副本

你提到的是ASP.NET,所以我不确定如果你通过一个内部设置为传递的站点来完成这些工作,其中的一些工作会有多大效果。但你也可以通过SSRS的订阅服务按计划发送电子邮件或保存文件

C.更改存储数据以进行报告的方式

您可以创建查询的选择项级别值的报表仓库。创建一个小数据库,它只包含最近几年的数据,并且只包含某些字段和某些表。然后将其索引到死亡并报告。根据我的经验,这种方法在性能方面是可行的,但它确实需要额外的设置开销。一般来说,大多数公司都会抱怨这一点,但通常需要一天的时间来设置,然后创建一个整夜都在执行的SSMS作业,或者创建一个SSIS包,这样您就不用担心了。我喜欢这种方法,因为我知道我的数据不会在生产过程中被报告,而且是孤立的