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;
ここの構成/コードには何が欠けていますか?
この問題に対する私の解決策は、レポートビューアの高さを100%に設定しようとすることに関連していました。その結果、レポートは表示されませんでした。高さをpx値(つまり900px)に変更すると、レポートビューアーが機能します。
非同期レンダリングがどのように機能するかを説明する このブログエントリ がMSDNにあります。
さらに、(コメントで述べられているように)同期レンダリングはコンテンツをページに埋め込み、非同期レンダリングはコンテンツをフレームにレンダリングすることにも言及しています。フレームのサイズは「計算が難しい...」であり、SizeToReportContentプロパティは無視されます。
レポートは同期的にレンダリングされないと表示されないため、問題はフレームの使用にあるはずです。
コメントで言及されている 記事 では、相対的な高さが使用されている場合、レポートを非同期にレンダリングすると、コントロールの高さがゼロピクセルに折りたたまれます。これは、何も表示されない理由を説明している可能性があります。コントロールの高さを指定してみてください。その記事には他にも提案があります。
これは、問題がVS2008から派生したと思われるSQLServer 2008 R2SSRSバージョンにあることを前提としています。SQLServer2012SSRSは、これらの問題が発生するはずのないVS 2010を利用していると思います。したがって、アップグレードが完了したら、この問題はなくなる可能性があります。
まったく同じ症状がありました。レポートが完全に空白のページでレンダリングされました。私にとっては本番環境の場合でしたが、開発環境でも機能しました。
レポートには2つのパラメーターがあり、RDLにはデフォルト値が指定されていません。背後にあるaspxコードでレポートを呼び出すときに、誤って1つのパラメーターのみを渡してしまいました。 2番目のパラメーターには、開発マシンのレポートサーバーでデフォルト値が設定されていましたが、本番では設定されていませんでした。 (はい、レポートサーバーでは、RDLファイルのデフォルト設定とは別にパラメーターのデフォルトを指定できます。)その結果、レポートは開発中でレンダリングされますが、本番ではレンダリングされません。
Fiddlerで応答XMLを調べて、これを見つけました。パラメータ値が無効であることを通知する要素が含まれていました。残念ながら、レポートビューア自体には、欠落しているパラメータに関するエラーメッセージは表示されず、空白のページが表示されるだけです。これにより、問題の原因を見つけるのが困難になります。
空白のレポートを取得すると、いくつかの問題が発生します。
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
モードに切り替えることができます
登録がOkの場合、Integrated
モードを使用できるはずです
私の場合は Glimpse でした。 Glimpseは非常に強力なツールであり、開発者のマシンでReporViewerと一緒に正常に動作しますが、デプロイされたカスタマーサーバーで問題が発生します。解決策は簡単でした、jstはweb.configからすべてのglimse設定を削除します
私のレポートも空白でした。プロパティで遊んだところ、ようやく現れました。
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>