Ответ 1
Мое решение этой проблемы связано с попыткой установить высоту просмотра отчетов на 100%. Это не привело к показу отчета. Изменение высоты до значения px (т.е. 900 пикселей) привело к работе Reportviewer.
У меня есть веб-форма, содержащая элемент управления 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;
Что мне не хватает в конфигурации/коде здесь?
Мое решение этой проблемы связано с попыткой установить высоту просмотра отчетов на 100%. Это не привело к показу отчета. Изменение высоты до значения px (т.е. 900 пикселей) привело к работе Reportviewer.
В MSDN есть эта запись в блоге, в которой обсуждается, как работает асинхронный рендеринг.
Кроме того, в нем упоминается, что (как было сказано в комментариях) синхронный рендеринг встраивает содержимое на страницу, в то время как асинхронный рендеринг отображает содержимое в кадре. Размер кадра "сложно... рассчитать", а свойство SizeToReportContent игнорируется.
Поскольку ваш отчет не будет отображаться, пока он не будет синхронно отображаться, проблема должна быть в использовании фреймов.
В статье, упомянутой в комментариях, асинхронно рендеринг отчета приведет к сглаживанию высоты элемента управления до нулевых пикселей, если используется относительная высота. Это может объяснить, почему ничего не отображается. Вы можете попробовать указать высоту элемента управления. В этой статье есть и другие предложения.
Предположим, что ваша проблема связана с версией SQL Server 2008 R2 SSRS, которая, как я полагаю, вырисовывается из VS 2008. SQL Server 2012 SSRS, я думаю, опирается на VS 2010, который не должен иметь эти проблемы, поэтому, когда вы закончите ваше обновление, эта проблема может исчезнуть.
У меня был точно такой же симптом: отчет был сделан с совершенно пустой страницей. Для меня это было в производстве, но оно работало в среде разработки.
В отчете были два параметра и в RDL оба без заданных значений по умолчанию. При вызове отчета в коде aspx я случайно прошел только один параметр. Второй параметр имел значение по умолчанию, установленное на сервере отчетов машины разработки, но не в производстве. (Да, сервер отчетов позволяет указывать параметры по умолчанию независимо от настроек по умолчанию в файле RDL.) В результате отчет отображается в процессе разработки, но не в производстве.
Я нашел это, посмотрев ответ XML с Fiddler. Он содержал элемент, указывающий мне, что значение параметра недействительно. К сожалению, сам Report Viewer не отображает сообщение об ошибке с отсутствующим параметром и просто отображает пустую страницу, что затрудняет поиск корня проблемы.
В моем отчете также было пустое. Я играл со свойствами, и он наконец появился.
Изменение свойства 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>
При получении пустых отчетов возникает несколько проблем:
Настройки 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 удаляет все параметры glimse из web.config