WebViewerコントロール使用時にレポートが表示されない
対象製品
ActiveReports for .NET 7.0J
詳細
WebViewerコントロールを使用して、レポートをブラウザ上に表示しようとしても、以下のようなエラーが発生したり、レポート/ビューワが表示されないなどの問題が発生する場合があります。
これらのエラーが発生する場合、様々な要因が考えられます。以下の内容をご確認ください。
- Flashビューワ形式の場合
- ドキュメントの読み込み中に、エラーが発生しました。追加情報: Error #2032
- 'swfobject' は宣言されていません。
- レポートは利用できません。
- その他の形式の場合
- No Report Specified.
- レポートは利用できません。
これらのエラーが発生する場合、様々な要因が考えられます。以下の内容をご確認ください。
- 必要なファイルが正しく配置されていない
- IIS の設定に誤りがある
- Web.Configファイルの記述に誤りがある
- Webガーデン構成やロードバランサーの構成にしている
- WebViewerコントロールに対して重複してレポートを設定している
- Session変数を経由してWebViewerコントロールにレポートを設定している
- レポート生成処理時に問題が発生している
- 仮想プリンタの設定が行われていない
- サーバーが高負荷状態になっている
- インターネットに接続できない環境である(Flashビューワのみ)
- 製品付属のサンプルを実行した場合の動作を確認する
- 必要なファイルが正しく配置されていない
ActiveReports for .NET の動作に必要なファイルが正しく配置されているかどうかご確認ください。
特に、Flashビューワを使用する場合は、"ActiveReports.FlashViewer.swf"が、Flashビューワを使用しているページと同じフォルダに存在している必要があります。
配置すべきファイルや配置場所等については、こちらの内容をご覧ください。 - IIS の設定に誤りがある
WebViewerコントロールを使用した場合、基本的に、以下のような動作になっています。
(特に Flashビューワ形式や PDF形式の場合)
拡大表示
IIS に対して適切な Handler の設定が行われていない場合、④~⑤の処理が正常に動作せず、Flashビューワ上にレポートが表示されず、冒頭で紹介したようなエラーが発生します。
製品ヘルプの以下のトピックに記載されております設定について、適切に行われているかどうか、ご確認ください。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- ActiveReportsを使用するための準備
- Webアプリケーションの実行前に必要な設定
- Webサンプルアプリケーションを動作させるための事前準備
- WebViewerおよびHTTPハンドラを使用するための事前準備(IIS6)
- WebViewerおよびHTTPハンドラを使用するための事前準備(IIS7/8)
特に、以下の内容にご注意ください。
- マッピングの設定は拡張子ごとに行います。拡張子のつづり(スペル)が誤っていると正常に動作しません。ご注意ください。
- マッピングの設定は、拡張子の種類に応じて、以下のように異なります。チェックボックスの設定に誤りがないようにご注意ください。
◆「.rpx」および「.rdlx」
IIS 6 :「ファイルの存在を確認する」をON
IIS 7/8:「要求のマップ先が次の場合のみハンドラを呼び出す」をON
◆「.ActiveReport」および「.ar7」、「.ar7Web」
IIS 6 :「ファイルの存在を確認する」をOFF
IIS 7/8:「要求のマップ先が次の場合のみハンドラを呼び出す」をOFF - IIS 7/8 の場合、"Classic.NET AppPool"の場合と"DefaultAppPool"の場合で、設定する内容が以下のように異なります。ご注意ください。
"Classic.NET AppPool":[スクリプトマップの追加...]
"DefaultAppPool" :[マネージハンドラの追加...] - 上記ヘルプの手順に従って、「既定のWebサイト(Default Web Site)」に対して、マッピングの設定を行ったにもかかわらず、その設定が個々のWebサイトに継承されない事象が事例として報告されております。
個々のWebサイトに対しても、マッピングの設定が正常に適用されているかご確認ください。
- Web.Configファイルの記述に誤りがある
デザイナ上で WebViewerコントロールをページ(.aspx)上に配置した時、Web.Configファイルの<httpHandlers>セクションに自動的に文字列が追加されます。
この文字列内に記述されているアセンブリバージョンが誤っているとWebViewerコントロールは正常に動作しません。問題が発生する環境に配置されている Web.Configファイルについて、バージョンが正しいかどうかご確認ください。 - Webガーデン構成やロードバランサーの構成にしている
WebViewerコントロールは、その仕様上、Webガーデン構成(複数のワーカープロセスが起動した状態)ではご利用いただけません。
詳細につきましては、以下の文書をご覧ください。
Webガーデンを使用した場合、WebViewerにレポートが正しく表示されない場合がある
問題が発生するアプリケーションについて、Webガーデン構成になっていないか、ご確認ください。
なお、Webサーバーをロードバランサーの構成にしている場合も、上記と同様の理由から、WebViewerコントロールは正常に動作しません。
■類似事例
SSL-VPN環境でFlashビューワにレポートが表示されない
これらについては、WebViewerコントロールの仕様上の制限事項となります。(こうした構成下でWebViewerコントロールを正しく動作させる機能・設定等は用意いたしておりません。)
製品ヘルプの以下のトピックもあわせてご覧ください。
ActiveReportsユーザーガイド
- よくある質問
- セクションレポート
- Web
- 「Web上でレポートが正しく表示されない」
- 「レポートが何も出力されない」 - WebViewerコントロールに対して重複してレポートを設定している
WebViewerコントロールに、表示するレポートを設定する方法には、以下の2つの方法がございます。
(1) コード上で Reportプロパティにレポートのインスタンスを設定
(2) デザイナ画面で ReportNameプロパティを設定
ReportNameプロパティと Reportプロパティが両方とも設定されている場合、ReportNameプロパティで設定されているレポートの方が優先されるため、コード上で Reportプロパティに行った設定が無視されて、デフォルトの設定でレポートが生成されます。
ReportNameプロパティで設定されているレポートが何らかの原因で生成に失敗した場合、WebViewerコントロール上にレポートが正しく表示されないなどの問題が発生致します。
もし、上記(1)と(2)の両方の方法を使用している場合には、予めデザイン時に WebViewerコントロールの ReportNameプロパティを空白に設定した上で、再度動作をご確認ください。 - Session変数を経由してWebViewerコントロールにレポートを設定している
前述「5.」にあります通り、WebViewerコントロールにレポートを設定する場合、コード上でReportプロパティにレポートを設定することが可能です。
この時、Reportプロパティに設定するレポートオブジェクトをSession変数(セッション変数)を経由して引き渡すと、不定期でAccessViolationExceptionの例外が発生する事例が報告されております。(この例外が発生した場合、アプリケーションの復旧にIISの再起動など必要となることも報告されております。)
前述の「2.」にあります通り、WebViewerコントロールを使用した場合、レポートの生成結果を一時的にASP.NETキャッシュに格納し、クライアント/サーバー間で複数の通信を行うような構造になっております。
レポートオブジェクトをSession変数に一旦格納すると、レポートが意図しないタイミングで破棄されてしまう場合があり、その結果、この内部動作が正常に動作せず、前述のような問題が発生しているものと考えられます。
WebViewerコントロールに設定するレポートは、Session変数に格納しないようにしてください。
◇参考情報
PRB: ASP.NET InProc セッション状態モードを使用するとセッション データが失われる
[PRB] ASP.NET アプリケーションで断続的にセッション変数が失われる
第4回 複数ページのWebアプリを実現する「ページ遷移」
※「●Session利用時の注意事項」参照
@IT:.NETエンタープライズWebアプリケーション開発技術大全 Sessionオブジェクト - レポート生成処理時に問題が発生している
WebViewerのReportプロパティにレポート(レポートのインスタンス)がセットされていない場合や、レポートが正常に作成されなかった場合に、冒頭に挙げたような問題が発生致します。
例えば、if ステートメントや try-catch ステートメントなどの分岐処理により、WebViewerコントロールの Reportプロパティにレポートがセットされていないといったことはございませんでしょうか。現象発生時の処理内容をご確認ください。
なお、エラー処理の一般的な方法やエラー発生時のログの出力等につきましては、マイクロソフト社の Webサイトで公開されている以下の情報などをご参考ください。
例外処理のタスク (Visual Basic)
例外と例外処理 (C# プログラミング ガイド)
アプリケーション、サーバー、およびセキュリティ イベントのログの記録 - 仮想プリンタの設定が行われていない
セクションレポートの場合、レポート生成時にも実行環境(サーバー)に接続されたプリンタドライバから用紙サイズ等の情報を取得します。(その際に参照されるプリンタは、基本的にサーバーの「通常使うプリンタ」に指定されているプリンタになります。)
適切なプリンタドライバが存在しない場合や、プリンタドライバが存在しても、そのドライバがレポート内で指定している用紙サイズをサポートしていない場合や、ASP.NET(ワーカープロセス)を実行しているアカウントがプリンタドライバにアクセスできる権限を持たない場合に、レポートが正常に作成されないなどの問題が発生することがあります。
その結果、WebViewerコントロールのReportプロパティにレポートがセットされず、冒頭に挙げたような問題が発生する可能性が考えられます。
こうした問題を回避する方法として、ActiveReports では仮想プリンタの機能をご用意しております。
仮想プリンタの設定を行った場合、プリンタドライバからの情報取得を行わず、任意のサイズでレポートを作成します。
レポートの作成前に、Printerクラスの PrinterNameプロパティに""を設定することで、仮想プリンタ機能を使用できます。(この際、デザイナ上での用紙サイズは、「デフォルトプリンタ」に設定し、コード上で用紙サイズ等を設定することをお勧め致します。)
仮想プリンタは、レポートを生成する環境と表示・印刷する環境が異なる Webアプリケーションなどで有効な方法です。もし、仮想プリンタの設定を行われていない場合には、実装した上で動作をご確認ください。
仮想プリンタの具体的な設定方法につきましては、製品ヘルプの以下のトピックが参考になるかと存じます。こちらをご覧ください。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- 概念
- セクションレポートの概念
- 仮想プリンタ
- よくある質問
- 印刷
- 「プリンタドライバがサポートしていない用紙サイズに出力する」
※ 仮想プリンタはセクションレポート限定の機能です。ページレポートの場合、上記のようにレポート生成時に実行環境上のプリンタを参照することはありません。 - サーバーが高負荷状態になっている
過去の事例では、実行環境(Webサーバ)が高負荷やリソース不足の状態にある条件で、WebViewerコントロールからのレポート出力が正常に行われず、レポートが正常に表示されない事象が確認されております。
前述2.の図にありますように、WebViewerコントロールはクライアントからレポートの出力要求があった場合、レポートを生成し、一旦ASP.NETのキャッシュ領域にレポートデータを保存する仕様となっております。
何らかの理由で、このキャッシュデータがクライアントに届く前(②から④の間)に消えてしまうと、レポートが表示されない等の問題が発生します。
キャッシュが消えてしまう原因の1つに、ワーカープロセス(aspnet_wp.exeまたはw3wp.exe)のメモリのリサイクルが挙げられます。IISでは、ある一定のしきい値を超えた場合に、ワーカープロセスがリサイクルされる仕組みになっていますので、高負荷、リソース不足の状態で、レポートが実行された場合、このリサイクルが発生し、本現象が発生し易い状態となります。
レポート作成時のメモリ使用量を軽減させる方法については、「レポート作成時のメモリ使用量を軽減させる方法について」をご参照ください。 - インターネットに接続できない環境である(Flashビューワのみ)
以下の条件をすべて満たす時、Flashビューワ上にレポートが何も表示されない(ツールバーも表示されない)事象が発生します。
- WebViewerコントロールのFlashViewerOptions.ResourceLocaleプロパティが"ja_JP(デフォルト)"に設定されている。
- 当該クライアント端末がインターネットに接続できない環境である。
・Grapecity.ActiveReports.Flash.v7.Resources.swf
この日本語リソースを適用するFlashビューワの内部処理の過程で、Adobe Flash Player がアドビシステムズ社のWebサイトで公開されている「ランタイム共有ライブラリ(Runtime Shared Libraries)」を自動的に要求しています。(この動作は、ActiveReports固有の仕様ではなく、Adobe Flash Playerの仕様によるです。)
インターネットに接続されていない環境の場合、このライブラリをアドビシステムズ社の Webサイトから取得できない状態になるため、Flashビューワの内部処理が正常に実行されず、レポートが表示されない事象が発生することが確認されています。
なお、上記のライブラリファイルは、一旦クライアントにダウンロードされるとFlash Playerのキャッシュに格納され、それ以降はキャッシュ内のファイルを参照する仕様となっています。したがって、日本語リソースが適用されたFlashビューワで一度レポートを表示すれば、それ以降はインターネットに接続されていなくても、この問題は発生しません。
クライアント端末に対して、以下のいずれかの対処をご検討ください。
- 常にインターネットに接続可能な状態にする。
- 一時的にインターネットに接続可能な状態とし、その状態で日本語リソースが適用されたFlashビューワを一度表示した後、インターネットに接続しないようにする。
- 製品付属のサンプルを実行した場合の動作を確認する
直接的な解決策ではございませんが、ご指摘の事象の原因が環境的な要因によるものか、そうでないかを切り分けるために、問題の環境(サーバー)に製品付属のサンプルを配置して実行させた場合に、ご指摘の事象と同様の事象が発生するかどうか、お試しください。
WebViewerコントロールを使用した Webアプリケーションのサンプルについては、製品ヘルプの以下の内容が参考になると存じます。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- サンプルとチュートリアル
- サンプル
- Professionalのサンプル
- Professional Web サンプル
※製品をインストールしたディレクトリ内の"Samples"フォルダに実際のサンプルプロジェクトが収められております。あわせてご利用ください
サンプルプロジェクトで問題が発生しない場合には、お客様のアプリケーションの実装内容とサンプルの実装内容に大きな相違がないかご確認ください。
関連情報
- ActiveReports for .NET を使用して作成した アプリケーションを実行環境に配布する際の作業内容・注意事項について
- 製品のバージョン(アセンブリバージョン)を調べる方法は?
- Webブラウザ内にPDFが表示されません。
キーワード
問題 印刷・プレビュー Web