我们在使用Sql Server Reporting Service开发报表的时候,经常会遇到报表超时的问题,报表超时的原因有很多,也有很多地方可以设置报表的超时时间,比如在报表中的数据源(datasource)上可以设置数据库连接的超时时间,在报表中的数据集(dataset)上可以设置执行查询语句的超时时间,在ASP.NET页面中的报表控件ReportViewer上也可以设置等待超时时间,除了前面说的三种超时时间还有一个超时时间很容易被忽略,那就是ASP.NET页面上ScriptManager控件的超时时间。因为ReportViewer在访问远程服务器报表的时候是通过ScriptManager控件发送Ajax请求来获取报表数据的,所以在使用ReportViewer控件的ASP.NET WebForm页面上都要求再放一个ScriptManager控件也就是这个原因。
ScriptManager控件默认的超时时间是90秒,所以当有一张报表在报表服务器上的处理时间超过90秒后客户端页面上就会报一个javascript的等待超时错误。我们可以设置ScriptManager控件的AsyncPostBackTimeout属性值来更改这个默认超时时间,该属性的单位是秒。下面两个截图分别显示用C#代码和ASP.NET页面控件标签来设置ScriptManager控件的AsyncPostBackTimeout属性为900秒:
通过C#代码设置:
通过ASP.NET页面控件标签设置: