Подтвердить что ты не робот

Контроль просмотра отчетов (Web) показывает пустой отчет

У меня есть веб-форма, содержащая элемент управления ReportViewer, элемент 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, увидев различные проблемы, указанные в других браузерах.

В настоящее время (для тестирования) передаю свои учетные данные в качестве учетных данных сервера отчетов. Я являюсь администратором служб отчетов, а также членом группы администраторов серверов на сервере.

Я проверил журнал событий и журнал ReportServerService и ничего не нашел.

UPDATE: Похоже, что при изменении AsyncRendering на false и убедитесь, что я не пытаюсь "SetParameters" с пустой коллекцией, это в основном очищается:

this.ReportViewer1.AsyncRendering = false;

Что мне не хватает в конфигурации/коде здесь?

4b9b3361

Ответ 1

Мое решение этой проблемы связано с попыткой установить высоту просмотра отчетов на 100%. Это не привело к показу отчета. Изменение высоты до значения px (т.е. 900 пикселей) привело к работе Reportviewer.

Ответ 2

В MSDN есть эта запись в блоге, в которой обсуждается, как работает асинхронный рендеринг.

Кроме того, в нем упоминается, что (как было сказано в комментариях) синхронный рендеринг встраивает содержимое на страницу, в то время как асинхронный рендеринг отображает содержимое в кадре. Размер кадра "сложно... рассчитать", а свойство SizeToReportContent игнорируется.

Поскольку ваш отчет не будет отображаться, пока он не будет синхронно отображаться, проблема должна быть в использовании фреймов.

В статье, упомянутой в комментариях, асинхронно рендеринг отчета приведет к сглаживанию высоты элемента управления до нулевых пикселей, если используется относительная высота. Это может объяснить, почему ничего не отображается. Вы можете попробовать указать высоту элемента управления. В этой статье есть и другие предложения.

Предположим, что ваша проблема связана с версией SQL Server 2008 R2 SSRS, которая, как я полагаю, вырисовывается из VS 2008. SQL Server 2012 SSRS, я думаю, опирается на VS 2010, который не должен иметь эти проблемы, поэтому, когда вы закончите ваше обновление, эта проблема может исчезнуть.

Ответ 3

У меня был точно такой же симптом: отчет был сделан с совершенно пустой страницей. Для меня это было в производстве, но оно работало в среде разработки.

В отчете были два параметра и в RDL оба без заданных значений по умолчанию. При вызове отчета в коде aspx я случайно прошел только один параметр. Второй параметр имел значение по умолчанию, установленное на сервере отчетов машины разработки, но не в производстве. (Да, сервер отчетов позволяет указывать параметры по умолчанию независимо от настроек по умолчанию в файле RDL.) В результате отчет отображается в процессе разработки, но не в производстве.

Я нашел это, посмотрев ответ XML с Fiddler. Он содержал элемент, указывающий мне, что значение параметра недействительно. К сожалению, сам Report Viewer не отображает сообщение об ошибке с отсутствующим параметром и просто отображает пустую страницу, что затрудняет поиск корня проблемы.

Ответ 4

В моем отчете также было пустое. Я играл со свойствами, и он наконец появился.

Изменение свойства ProcessingMode в элементе управления ReportViewer на странице aspx работало для меня:

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

Ответ 5

При получении пустых отчетов возникает несколько проблем:

  • Трубопровод 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. Другой обработчик вмешивается в ReportViewer

В моем случае это было Glimpse. Glimpse - очень мощный инструмент, и он отлично работает вместе с ReporViewer на машине разработчика, но у него есть проблемы с развертываемым сервером клиентов. Решение было простым, jst удаляет все параметры glimse из web.config