报告查看器控件(Web)显示空白报告

rea*_*Jim 17 sql-server asp.net reportviewer webforms reporting-services

我有一个包含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>
Run Code Online (Sandbox Code Playgroud)

显示报告的代码是:

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();
}
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

而且:

<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>
Run Code Online (Sandbox Code Playgroud)

服务器运行Windows 2008和SQL Server 2008 R2.

我正在使用SQL Server 2012版本的查看器,因为我们正在将环境更新到2012.

我已经多次验证报告可以从ReportManager访问,没有任何问题.

我已经尝试在IE9中访问它,已经看到了其他浏览器声明的各种问题.

我目前(仅用于测试)将我的凭据作为报表服务器凭据传递.我是Reporting Services管理员,也是服务器上服务器管理员组的成员.

我已经检查了事件日志和ReportServerService日志,并且没有发现任何错误.

更新:看起来当将AsyncRendering更改为false时,并确保我不尝试使用空集合的"SetParameters",这大部分被清除:

this.ReportViewer1.AsyncRendering = false;
Run Code Online (Sandbox Code Playgroud)

我在配置/代码中缺少什么?

Kit*_*Fox 1

MSDN 上有一篇博客文章讨论了异步渲染的工作原理。

此外,它还提到(正如评论中所述)同步渲染将内容嵌入页面中,而异步渲染则将内容渲染在框架中。框架的大小“难以计算”并且忽略 SizeToReportContent 属性。

由于除非同步渲染,否则报表不会显示,因此问题必定出在框架的使用上。

在评论中提到的文章中,如果使用相对高度,异步渲染报表会将控件高度折叠为零像素。这可以解释为什么没有显示任何内容。您可以尝试指定控件的高度。该文章中还有其他建议。

假设您的问题出在 SQL Server 2008 R2 SSRS 版本中,我相信该版本源自 VS 2008。我认为 SQL Server 2012 SSRS 源自 VS 2010,它不应该存在这些问题,因此当您完成升级时,这个问题可能会消失。