Asp.net 报表查看器控件(Web)显示空白报表
我有一个web表单,其中包含一个ReportViewer控件和一个DIV元素,这样我就可以看到页面实际呈现的情况。我看到我的页面被正确加载,我看到报告服务在Fiddler中被访问,但从来没有显示任何内容 目前,我使用的是一个静态文本的报告,没有任何查询,以确保隔离问题 我的网页如下:Asp.net 报表查看器控件(Web)显示空白报表,asp.net,sql-server,reporting-services,webforms,reportviewer,Asp.net,Sql Server,Reporting Services,Webforms,Reportviewer,我有一个web表单,其中包含一个ReportViewer控件和一个DIV元素,这样我就可以看到页面实际呈现的情况。我看到我的页面被正确加载,我看到报告服务在Fiddler中被访问,但从来没有显示任何内容 目前,我使用的是一个静态文本的报告,没有任何查询,以确保隔离问题 我的网页如下: 这是报表查看器页面。。。 显示报告的代码为: 受保护的无效页面加载(对象发送方,事件参数e) { this.ReportViewer1.ServerReport.ReportServerUrl=Configur
这是报表查看器页面。。。
显示报告的代码为:
受保护的无效页面加载(对象发送方,事件参数e)
{
this.ReportViewer1.ServerReport.ReportServerUrl=ConfigurationFacade.ReportServerUri;
this.ReportViewer1.ServerReport.ReportPath={path to report name};
this.ReportViewer1.ServerReport.ReportServerCredentials=new ReportServerCredentials();//实现IReportServerCredentials的自定义类,如web各地所述,包括SO
this.ReportViewer1.ServerReport.Refresh();
}
我的web.config文件根据需要配置了HttpHandler:
以及:
服务器运行Windows 2008和SQL server 2008 R2
我正在使用SQL Server 2012版本的查看器,因为我们正在将环境更新到2012
我已反复验证报告是否可以从ReportManager访问,没有任何问题
我一直试图在IE9中访问它,看到了其他浏览器的各种问题
我目前(仅用于测试)将我的凭据作为报表服务器凭据传递。我是Reporting Services管理员,也是服务器上server administrators组的成员
我已经检查了事件日志和ReportServerService日志,没有发现任何问题
更新:将AsyncRendering更改为false,并确保我不会尝试使用空集合“设置参数”,这一点基本上得到了解决:
this.ReportViewer1.AsyncRendering=false;
我在这里的配置/代码中缺少了什么?MSDN中有一个讨论异步渲染工作原理的部分
此外,它还提到(如注释中所述)同步呈现将内容嵌入页面中,而异步呈现将内容呈现在框架中。框架的大小“难以计算”,SizeToReportContent属性被忽略
由于除非同步呈现报告,否则报告不会显示,因此问题必须在使用帧时出现
在注释中提到的情况下,如果使用相对高度,异步呈现报告将控件高度折叠为零像素。这可以解释为什么什么也不显示。您可以尝试指定控件的高度。那篇文章中还有其他建议
假设您的问题出现在SQLServer2008R2 SSRS版本中,我相信它来自VS2008。我认为SQL Server 2012 SSR借鉴了VS 2010,而VS 2010不应该存在这些问题,因此当您完成升级时,这个问题可能会消失。我有完全相同的症状:报告呈现时页面完全空白。对我来说,这是生产中的情况,但它在开发环境中起作用 报告有两个参数,在RDL中都没有指定默认值。在用aspx代码调用报告时,我意外地只传递了一个参数。第二个参数在开发机器的报表服务器上设置了默认值,但在生产环境中没有设置。(是的,报表服务器允许独立于RDL文件中的默认设置指定参数默认值。)因此,报表将在开发中呈现,而不是在生产中呈现
我通过使用Fiddler查看响应XML发现了这一点。它包含一个元素,告诉我参数值无效。不幸的是,报表查看器本身没有显示任何有关缺少参数的错误消息,只显示一个空白页,这使得问题的根源很难找到。我的报表也显示为空白。我玩了这些属性,它终于出现了 在aspx页面中更改ReportViewer控件上的ProcessingMode属性对我很有用:
这就是我所拥有的:
web.config:
...
我解决此问题的方法是尝试将报表查看器高度设置为100%。这导致没有报告显示。将高度更改为px值(即900px)可使reportviewer正常工作。当您获得空白报告时,会出现几个问题:
<system.webServer>
<handlers>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</handlers>
如果错过了正确的注册,您可以尝试将IIS应用程序池切换到Classic
模式
如果您的注册正常,您应该能够使用集成模式
另一个处理程序干扰ReportViewer
在我的情况下是这样的。Spile是一个非常强大的工具,它可以在开发人员机器上与ReporViewer配合使用,但在部署的客户服务器上存在问题。解决方案很简单,jst从web.config中删除所有glimse设置只是一个愚蠢的检查/问题:您是否也用一个新的基本报告(例如,只有一个硬编码文本的文本框)检查了这个问题?另外,您可以添加您正在使用的ReportViewer控件的哪个版本吗?是的,目前,我正在使用