17

我有一个包含 ReportViewer 控件和 DIV 元素的 Web 表单,因此我可以看到页面实际呈现。我看到我的页面正确加载,我看到在 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 日志,没有发现任何问题。

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

this.ReportViewer1.AsyncRendering = false;

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

4

5 回答 5

4

我对此问题的解决方案与尝试将报表查看器高度设置为 100% 有关。这导致没有报告显示。将高度更改为 px 值(即 900px)使报表查看器正常工作。

于 2015-03-11T18:07:23.403 回答
1

我有完全相同的症状:报表呈现为完全空白页。对我来说,生产环境就是这种情况,但它在开发环境中工作。

该报告有两个参数,并且在 RDL 中都没有指定默认值。在后面的 aspx 代码中调用报表时,我不小心只传递了一个参数。第二个参数在开发机器的报表服务器上设置了默认值,但在生产中没有。(是的,报表服务器允许独立于 RDL 文件中的默认设置指定参数默认值。)因此,报表在开发中呈现,但在生产中不呈现。

我通过使用 Fiddler 查看响应 XML 发现了这一点。它包含一个元素,告诉我参数值无效。不幸的是,报告查看器本身并没有显示任何关于缺少参数的错误消息,而只是显示一个空白页面——这使得问题的根源难以找到。

于 2013-07-01T12:22:07.370 回答
1

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

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

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

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

假设您的问题出在 SQL Server 2008 R2 SSRS 版本中,我相信它来自 VS 2008。我认为 SQL Server 2012 SSRS 借鉴了 VS 2010,它不应该有这些问题,所以当你完成升级时,这个问题可能会消失。

于 2013-04-02T15:28:42.480 回答
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>

网络配置:

<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>
于 2014-01-29T22:44:25.167 回答
0

当您得到空白报告时有几个问题:

  1. IIS 管道;IIS 6 与 IIS7 及更高版本确保您已正确注册 HttpHandler

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模式

  1. 另一个 Handler 干扰 ReportViewer

就我而言,它是Glimpse。Glimpse 是一个非常强大的工具,它可以在开发人员机器上与 ReporViewer 一起正常工作,但在部署的客户服务器上存在问题。解决方案很简单,只需从 web.config 中删除所有 glimse 设置

于 2017-12-21T13:37:42.737 回答