web-dev-qa-db-ja.com

レポートビューアコントロール(Web)に空白のレポートが表示される

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>

サーバーは、Windows2008およびSQLServer 2008R2を実行します。

環境を2012に更新している最中なので、SQL Server2012バージョンのビューアを使用しています。

ReportManagerからレポートにアクセスできることを繰り返し確認しましたが、問題はありません。

他のブラウザでさまざまな問題が発生しているのを見て、IE9でこれにアクセスしようとしています。

現在(テストのみ)、自分の資格情報をレポートサーバーの資格情報として渡しています。私はReportingServices管理者であり、サーバーのサーバー管理者グループのメンバーです。

イベントログとReportServerServiceログの両方を確認しましたが、何も問題はありませんでした。

PDATE: AsyncRenderingをfalseに変更し、空のコレクションで「SetParameters」を実行しようとしないようにすると、これはほとんどクリアされます。

this.ReportViewer1.AsyncRendering = false;

ここの構成/コードには何が欠けていますか?

17
reallyJim

この問題に対する私の解決策は、レポートビューアの高さを100%に設定しようとすることに関連していました。その結果、レポートは表示されませんでした。高さをpx値(つまり900px)に変更すると、レポートビューアーが機能します。

3
John M

非同期レンダリングがどのように機能するかを説明する このブログエントリ がMSDNにあります。

さらに、(コメントで述べられているように)同期レンダリングはコンテンツをページに埋め込み、非同期レンダリングはコンテンツをフレームにレンダリングすることにも言及しています。フレームのサイズは「計算が難しい...」であり、SizeToReportContentプロパティは無視されます。

レポートは同期的にレンダリングされないと表示されないため、問題はフレームの使用にあるはずです。

コメントで言及されている 記事 では、相対的な高さが使用されている場合、レポートを非同期にレンダリングすると、コントロールの高さがゼロピクセルに折りたたまれます。これは、何も表示されない理由を説明している可能性があります。コントロールの高さを指定してみてください。その記事には他にも提案があります。

これは、問題がVS2008から派生したと思われるSQLServer 2008 R2SSRSバージョンにあることを前提としています。SQLServer2012SSRSは、これらの問題が発生するはずのないVS 2010を利用していると思います。したがって、アップグレードが完了したら、この問題はなくなる可能性があります。

1
Kit Z. Fox

まったく同じ症状がありました。レポートが完全に空白のページでレンダリングされました。私にとっては本番環境の場合でしたが、開発環境でも機能しました。

レポートには2つのパラメーターがあり、RDLにはデフォルト値が指定されていません。背後にあるaspxコードでレポートを呼び出すときに、誤って1つのパラメーターのみを渡してしまいました。 2番目のパラメーターには、開発マシンのレポートサーバーでデフォルト値が設定されていましたが、本番では設定されていませんでした。 (はい、レポートサーバーでは、RDLファイルのデフォルト設定とは別にパラメーターのデフォルトを指定できます。)その結果、レポートは開発中でレンダリングされますが、本番ではレンダリングされません。

Fiddlerで応答XMLを調べて、これを見つけました。パラメータ値が無効であることを通知する要素が含まれていました。残念ながら、レポートビューア自体には、欠落しているパラメータに関するエラーメッセージは表示されず、空白のページが表示されるだけです。これにより、問題の原因を見つけるのが困難になります。

1
Slauma

空白のレポートを取得すると、いくつかの問題が発生します。

  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モードに切り替えることができます Managed Pipeline Mode

登録がOkの場合、Integratedモードを使用できるはずです

  1. 別のハンドラーがReportViewerに干渉します

私の場合は Glimpse でした。 Glimpseは非常に強力なツールであり、開発者のマシンでReporViewerと一緒に正常に動作しますが、デプロイされたカスタマーサーバーで問題が発生します。解決策は簡単でした、jstはweb.configからすべてのglimse設定を削除します

0
Vojta

私のレポートも空白でした。プロパティで遊んだところ、ようやく現れました。

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>
0
live-love