我有一个包含ReportViewer控件的Web表单,一个DIV元素,所以我可以看到页面实际渲染。我看到我的页面正确加载,我看到Fiddler中正在访问报表服务,但是从未显示任何内容。
目前,我正在使用带有静态文本的报告,对此没有任何疑问,以确保我能够隔离问题。
我的页面如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewer.aspx.cs" Inherits="PeopleNet.Web.Views.Reports.ReportViewer" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/scripts/jquery-1.7.2.js" />
<asp:ScriptReference Path="~/scripts/fixReportViewer.js" />
</Scripts>
</asp:ScriptManager>
<div>
This is the report viewer page...
</div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server"></rsweb:ReportViewer>
</form>
</body>
</html>
显示报告的代码是:
protected void Page_Load(object sender, EventArgs e)
{
this.ReportViewer1.ServerReport.ReportServerUrl = ConfigurationFacade.ReportServerUri;
this.ReportViewer1.ServerReport.ReportPath = { path to report name };
this.ReportViewer1.ServerReport.ReportServerCredentials = new ReportServerCredentials(); // custom class implementing IReportServerCredentials as described in various places around the web, including SO
this.ReportViewer1.ServerReport.Refresh();
}
我的web.config文件根据需要配置了HttpHandlers:
<system.web>
<!-- abbreviated... -->
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" validate="false" />
</httpHandlers>
</system.web>
并且:
<system.webServer>
<!-- abbreviated... -->
<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>
</system.webServer>
服务器运行Windows 2008和SQL Server 2008 R2。
我正在使用SQL Server 2012版本的查看器,因为我们正在将环境更新到2012年。
我已经多次验证报告是否可以从ReportManager访问,没有任何问题。
我一直试图在IE9中访问它,看过其他浏览器中陈述的各种问题。
我目前(仅用于测试)将我的凭据作为报表服务器凭据传递。我是Reporting Services管理员,也是服务器上服务器管理员组的成员。
我已经检查了事件日志和ReportServerService日志,并且没有发现任何错误。
UPDATE:看起来将AsyncRendering更改为false,并确保我不尝试使用空集合“SetParameters”时,这大部分都会被清除:
this.ReportViewer1.AsyncRendering = false;
我在配置/代码中缺少什么?
答案 0 :(得分:3)
我对此问题的解决方案与尝试将报表查看器高度设置为100%有关。这导致没有报告显示。将高度更改为px值(即900px)使报表查看器正常工作。
答案 1 :(得分:1)
MSDN上有this blog entry讨论异步呈现的工作原理。
此外,它提到(如评论中所述)同步呈现将内容嵌入页面中,而异步呈现则在帧中呈现内容。框架的大小“难以计算”,并且忽略了SizeToReportContent属性。
由于除非同步呈现报告,否则不会显示报告,因此问题必须在于使用框架。
在评论中提到的the article中,如果使用相对高度,异步渲染报表会将控件高度折叠为零像素。这可以解释为什么没有显示。您可以尝试为控件指定高度。该文章中还有其他建议。
假设您的问题出现在SQL Server 2008 R2 SSRS版本中,我认为该版本来自VS 2008. SQL Server 2012 SSRS我认为借鉴VS 2010,不应该有这些问题,所以当你完成升级后,这个问题可能会消失。
答案 2 :(得分:1)
我有完全相同的症状:报告是使用完全空白的页面呈现的。对我来说就是生产中的情况,但它在开发环境中起作用。
报告有两个参数,在RDL中都没有指定默认值。在后面的aspx代码中调用报表时,我不小心只传递了一个参数。第二个参数在开发计算机的报表服务器上设置了默认值,但未在生产中设置。 (是的,报表服务器允许独立于RDL文件中的默认设置指定参数默认值。)因此,报表在开发中呈现但未在生产中呈现。
我通过查看Fiddler的响应XML找到了这个。它包含一个告诉我参数值无效的元素。遗憾的是,报告查看器本身不显示有关缺失参数的任何错误消息,只显示一个空白页面 - 这使得问题的根源很难找到。
答案 3 :(得分:0)
我的报告也显示空白。我玩了这些属性,最终出现了。
在aspx页面中更改ReportViewer控件上的ProcessingMode属性对我有用:
<rsweb:ReportViewer ID="ReportViewer1" runat="server"
Width="100%" ProcessingMode="Remote">
</rsweb:ReportViewer>
这就是我所拥有的:
<rsweb:ReportViewer ID="ReportViewer1" runat="server" ZoomMode="PageWidth"
Font-Names="Verdana" Font-Size="8pt" Width="100%" ProcessingMode="Remote"
ShowParameterPrompts="False" ShowToolBar="True" ShowCredentialPrompts="False"
ShowFindControls="False" ShowZoomControl="False" CssClass="ReportViewer">
</rsweb:ReportViewer>
的web.config:
<configuration>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<httpHandlers>
<add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" validate="false" />
</httpHandlers>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<membership>
<providers>
...
</providers>
</roleManager>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<handlers>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
</configuration>
答案 4 :(得分:0)
当您收到空白报告时有几个问题:
IIS7设置
<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
模式
如果您的注册确定,则应该可以使用Integrated
模式
就我而言,它是Glimpse。 Glimpse是一个非常强大的工具,它与开发人员机器上的ReporViewer一起工作正常,但它在部署的客户服务器上存在问题。解决方案很简单,jst从web.config中删除所有glimse设置