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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报告查看器控件(Web)显示空白报告相关的知识,希望对你有一定的参考价值。

我有一个包含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日志,并且没有发现任何错误。

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

this.ReportViewer1.AsyncRendering = false;

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

答案

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

另一答案

MSDN上有this blog entry,讨论异步渲染的工作原理。

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

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

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

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

另一答案

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

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

我通过查看Fiddler的响应XML找到了这个。它包含一个告诉我参数值无效的元素。遗憾的是,报告查看器本身不会显示有关缺失参数的任何错误消息,只显示一个空白页面 - 这使得难以找到问题的根源。

另一答案

我的报告也显示空白。我玩了这些属性,最终出现了。

在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>
另一答案

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

  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>

More details

如果错过了正确的注册,您可以尝试将IIS应用程序池切换到Classic模式Managed Pipeline Mode

如果你的注册是好的,你应该能够使用Integrated模式

  1. 另一个处理程序干扰ReportViewer

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

以上是关于报告查看器控件(Web)显示空白报告的主要内容,如果未能解决你的问题,请参考以下文章

报告参数的日期时间格式问题,在 s-s-rS 报告 Web 服务中,而不是报告查看器控件

MVCReportViewer :报表查看器 Web 控件需要 Web 表单上的 System.Web.UI.ScriptManager

报表查看器无法访问其他数据库服务器中的报表

在没有报告查看器的情况下将 s-s-rS 报告嵌入网页

iPad 的报告查看器

s-s-rS 报告管理器空白