WebViewerコントロール使用時にレポートが表示されない
対象製品
ActiveReports for .NET 9.0J
詳細
WebViewerコントロールを使用して、レポートをブラウザ上に表示しようとしても、以下のようなエラーが発生したり、レポート/ビューワが表示されないなどの問題が発生する場合があります。
■Flashビューワ形式の場合
■その他の形式の場合
これらのエラーが発生する場合、様々な要因が考えられます。以下の内容をご確認ください。
■Flashビューワ形式の場合
- ドキュメントの読み込み中に、エラーが発生しました。追加情報: Error #2032
- 'swfobject' は宣言されていません。
- レポートは利用できません。
- リクエストの送信に失敗しました。
/ActiveReports.ReportService.asmx/RunReport - *****
■その他の形式の場合
- No Report Specified.
- レポートは利用できません。
これらのエラーが発生する場合、様々な要因が考えられます。以下の内容をご確認ください。
- 必要なファイルが正しく配置されていない
- IISの設定に誤りがある
- Web.Configファイルの記述に誤りがある
- Webガーデン構成やロードバランサーの構成にしている
- WebViewerコントロールに対して重複してレポートを設定している
- Session変数を経由してWebViewerコントロールにレポートを設定している
- レポート生成処理時に問題が発生している
- 仮想プリンタの設定が行われていない
- サーバーが高負荷状態になっている
- インターネットに接続できない環境である(Flashビューワのみ)
- 製品付属のサンプルを実行した場合の動作を確認する
- 必要なファイルが正しく配置されていない
ActiveReports for .NETの動作に必要なファイルが正しく配置されているかどうかご確認ください。
特に、Flashビューワを使用する場合は、"Grapecity.ActiveReports.Flash.v9.swf"が、適切な場所に配置されている必要があります。
配置すべきファイルや配置場所等については、こちらのナレッジ文書をご参照ください。 - IIS の設定に誤りがある
WebViewerコントロールを使用した場合、基本的に、以下のような動作になっています。(特にFlashビューワ形式やPDF形式の場合)
(1) クライアントからリクエストがあるとサーバー側ではレポートを作成し、それをレポートのデータ(拡張子「.ar9」のキャッシュアイテム)としてASP.NETワーカープロセス内のASP.NETキャッシュに格納します。 (2) サーバー上で、レポートデータを表示するためのWebViewerコントロールを配置したHTMLとレポートデータを要求するためのデータを生成し、クライアントに返します。 (3) クライアントのブラウザではHTMLが取り込まれると、レポートデータ(.ar9)を呼び出すためのリクエストを発行します。 (4) レポートデータを呼び出すリクエストを処理し、クライアントに返します。
【WebViewerコントロールの動作概念図】
IISに対してハンドラ(拡張子マッピング)の設定が適切に行われていない場合、上図中の④~⑤の処理が正常に動作せず、クライアント側ではレポートは表示されずに冒頭で紹介したようなエラーが発生します。
製品ヘルプの以下のトピックに記載されております設定について、適切に行われているかどうか、ご確認ください。
ActiveReportsユーザーガイド
- ActiveReportsを使用するための準備
- Webアプリケーションの実行前に必要な設定
- Webサンプルアプリケーションを動作させるための事前準備
- WebViewerおよびHTTPハンドラを使用するための事前準備(IIS7/8)
特に、以下の内容にご注意ください。
- マッピングの設定は拡張子ごとに行います。拡張子のつづり(スペル)が誤っていると正常に動作しません。ご注意ください。
- マッピングの設定は、拡張子の種類に応じて、以下のように異なります。チェックボックスの設定に誤りがないようにご注意ください。
◆「.rpx」および「.rdlx」
IIS 7/8:「要求のマップ先が次の場合のみハンドラを呼び出す」をON
◆「.ActiveReport」および「.ar9」、「.ar9Web」
IIS 7/8:「要求のマップ先が次の場合のみハンドラを呼び出す」をOFF - マネージ パイプライン モードが"クラシック(Classic)"の場合と"統合(Integrated)"の場合で、設定する内容が以下のように異なります。ご注意ください。
"クラシック":[スクリプトマップの追加...]
"統合" :[マネージハンドラの追加...] - 上記ヘルプの手順にしたがって、「既定のWebサイト(Default Web Site)」に対して、マッピングの設定を行ったにもかかわらず、その設定が個々のWebサイトに継承されない事例が報告されています。
個々のWebサイトに対しても、マッピングの設定が正常に適用されているかご確認ください。
- Web.Configファイルの記述に誤りがある
デザイナ上でWebViewerコントロールをページ(.aspx)上に配置した時、Web.Configファイルの<httpHandlers>セクションなどに自動的に文字列が追加されます。
この文字列内に記述されているアセンブリバージョンが誤っているとWebViewerコントロールは正常に動作しません。問題が発生する環境に配置されている Web.Configファイルについて、バージョンが正しいかどうかご確認ください。 - Webガーデン構成やロードバランサーの構成にしている
WebViewerコントロールは、その仕様上、Webガーデン構成(複数のワーカープロセスが起動した状態)ではご利用いただけません。
■WebViewerコントロールがWebガーデン構成に対応していない理由
前述「2.」でご説明した通り、WebViewerコントロールを使用している場合、レポートデータはASP.NETキャッシュに一旦格納される仕様となっております。
しかしながら、Webガーデン(複数のワーカープロセスが起動した状態)では、複数のプロセスにまたがってASP.NETキャッシュを管理することができません。
そのため、Webガーデン使用時は、前述「2.」の(1)と(3)のリクエストが異なるワーカープロセスで処理される可能性があります。
リクエストが異なるプロセスで処理された場合、上述の制限から、(3)のリクエスト処理時に、(1)でASP.NETキャッシュに格納されたレポートデータ(.ar9)を取得できない(レポートデータがキャッシュに存在しない)状態となり、レポートが正しく表示されない現象が発生します。
【Webガーデン構成時のWebViewerコントロールの動作概念図】
なお、Webガーデンのプロセス管理については、マイクロソフト社の以下の技術情報をご参照ください。
ASP.NET ワーカー プロセス
問題が発生するアプリケーションについて、Webガーデン構成になっていないか、ご確認ください。
なお、Webサーバーをロードバランサーの構成にしている場合も、上記と同様の理由から、WebViewerコントロールは正常に動作しません。
■類似事例
リバースプロキシーやロードバランサーの環境で、Flashビューワにレポートが表示されない
これらについては、WebViewerコントロールの仕様上の制限事項となります。(こうした構成下でWebViewerコントロールを正しく動作させる機能・設定等は用意いたしておりません。)
製品ヘルプの以下のトピックもあわせてご覧ください。
ActiveReportsユーザーガイド
- よくある質問
- 共通の項目(ページレポート、RDLレポートとセクションレポート)
- 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の再起動など必要となることも報告されております。)
※AccessViolationException発生時のエラーメッセージ(例)
「Attempted to read or write protected memory. This is often an indication that other memory is corrupt.」
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
前述の「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# プログラミング ガイド)
アプリケーション、サーバー、およびセキュリティ イベントのログの記録
また、レポートから32ビット限定のライブラリを参照しているにもかかわらず、64ビットアプリケーションとして動作するように設定されていることはありませんでしょうか。
Webアプリケーションの場合、32ビットと64ビットのどちらで実行されるかは、IISの設定に依存します。IISの設定やビルドオプションなどを確認してください。
◇参考情報
MSDN Blogs|Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
方法 : アプリケーションを特定の種類の CPU に最適化する
デバッグ構成およびリリース プロジェクト構成 - 仮想プリンタの設定が行われていない
セクションレポートの場合、レポート生成時にも実行環境(サーバー)に接続されたプリンタドライバから用紙サイズ等の情報を取得します。(その際に参照されるプリンタは、基本的にサーバーの「通常使うプリンタ」に指定されているプリンタになります。)
適切なプリンタドライバが存在しない場合や、プリンタドライバが存在してもそのドライバがレポート内で指定している用紙サイズをサポートしていない場合や、ASP.NET(ワーカープロセス)を実行しているアカウントがプリンタドライバにアクセスできる権限を持たない場合などに、レポートが正常に作成されないなどの問題が発生することがあります。
その結果、WebViewerコントロールのReportプロパティにレポートがセットされず、冒頭に挙げたような問題が発生する可能性が考えられます。
こうした問題を回避する方法として、仮想プリンタの機能をご用意しております。
仮想プリンタの設定を行った場合、プリンタドライバからの情報取得を行わず、任意のサイズでレポートを作成します。
レポートの作成前に、Document.PrinterクラスのPrinterNameプロパティに""を設定することで、仮想プリンタ機能を使用できます。(この際、デザイナ上での用紙サイズは、「デフォルトプリンタ」に設定し、コード上で用紙サイズ等を設定することをおすすめいたします。)
仮想プリンタは、レポートを生成する環境と表示・印刷する環境が異なるWebアプリケーションなどで非常に有効な方法です。もし、仮想プリンタの設定を行われていない場合には、実装した上で動作をご確認ください。
仮想プリンタの具体的な設定方法については、製品ヘルプの以下のトピックをご参照ください。
ActiveReportsユーザーガイド
- 概念
- セクションレポートの概念
- 仮想プリンタ
- よくある質問
- 印刷
- 「プリンタドライバがサポートしていない用紙サイズに出力する」
※ 仮想プリンタはセクションレポート限定の機能です。ページレポートの場合、上記のようにレポート生成時に実行環境上のプリンタを参照することはありません。 - サーバーが高負荷状態になっている
過去の事例では、実行環境(Webサーバ)が高負荷やリソース不足の状態にある条件で、WebViewerコントロールからのレポート出力が正常に行われず、レポートが正常に表示されない事象が確認されております。
前述「2.」の図にありますように、WebViewerコントロールはクライアントからレポートの出力要求があった場合、レポートを生成し、一旦ASP.NETのキャッシュ領域にレポートデータを保存する仕様となっております。
何らかの理由で、このキャッシュデータがクライアントに届く前(②から④の間)に消えてしまうと、レポートが表示されない等の問題が発生します。
キャッシュが消えてしまう原因の1つに、ワーカープロセス(aspnet_wp.exeまたはw3wp.exe)のメモリのリサイクルが挙げられます。IISでは、ある一定のしきい値を超えた場合に、ワーカープロセスがリサイクルされる仕組みになっていますので、高負荷、リソース不足の状態で、レポートが実行された場合、このリサイクルが発生し、本現象が発生し易い状態となります。
レポート作成時のメモリ使用量を軽減させる方法については、こちらのナレッジ文書をご参照ください。 - インターネットに接続できない環境である(Flashビューワのみ)
以下の条件をすべて満たす時、Flashビューワ上にレポートが何も表示されない(ツールバーも表示されない)事象が発生します。
- WebViewerコントロールのFlashViewerOptions.ResourceLocaleプロパティが"ja_JP(デフォルト)"に設定されている。
- 当該クライアント端末がインターネットに接続できない環境である。
・Grapecity.ActiveReports.Flash.v9.Resources.swf
この日本語リソースを適用するFlashビューワの内部処理の過程で、Adobe Flash Playerがアドビシステムズ社のWebサイトで公開されている「ランタイム共有ライブラリ(Runtime Shared Libraries)」を自動的に要求しています。(この動作は、ActiveReports固有の仕様ではなく、Adobe Flash Playerの仕様によるものです。)
インターネットに接続されていない環境の場合、このライブラリをアドビシステムズ社のWebサイトから取得できない状態になるため、Flashビューワの内部処理が正常に実行されず、レポートが表示されない事象が発生することが確認されています。
なお、上記のライブラリファイルは、一旦クライアントにダウンロードされるとFlash Playerのキャッシュに格納され、それ以降はキャッシュ内のファイルを参照する仕様となっています。したがって、日本語リソースが適用されたFlashビューワで一度レポートを表示すれば、それ以降はインターネットに接続されていなくても、この問題は発生しません。
以下のいずれかの対処をご検討ください。
- インターネット接続が可能な場合 クライアント端末で「ランタイム共有ライブラリ(Runtime Shared Libraries)」を取得します。
- 常にインターネットに接続可能な状態にする。または、一時的にインターネットに接続可能な状態とし、その状態で日本語リソースが適用されたFlashビューワを一度表示した後、インターネットに接続しないようにする。
- インターネットに接続できない場合 Flashビューワを配置したサーバーに「ランタイム共有ライブラリ(Runtime Shared Libraries)」を配置します。
- 以下の「ランタイム共有ライブラリ(Runtime Shared Libraries)」をダウンロードし、サーバーに配置する。
※Grapecity.ActiveReports.Flash.v9.Resources.swfと同じディレクトリに配置します。
- framework_4.5.1.21328.swz
- textLayout_2.0.0.232.swz
Release notes | Flex 4.5.1 SDK
- MIMEを設定する。
- 拡張子: .swz
- MIMEの種類: application/x-swz
- 製品付属のサンプルを実行した場合の動作を確認する
直接的な解決策ではございませんが、ご指摘の事象の原因が環境的な要因によるものか、そうでないかを切り分けるために、問題の環境(サーバー)に製品付属のサンプルを配置して実行させた場合に、ご指摘の事象と同様の事象が発生するかどうか、お試しください。
WebViewerコントロールを使用したWebアプリケーションのサンプルについては、製品ヘルプの以下の内容が参考になると存じます。
ActiveReportsユーザーガイド
- サンプルとチュートリアル
- サンプル
- Professionalのサンプル
- Professional Web サンプル
※ 製品をインストールしたディレクトリ内の"Samples"フォルダに実際のサンプルプロジェクトが収められております。ご利用ください。
サンプルプロジェクトで問題が発生しない場合には、お客様のアプリケーションの実装内容とサンプルの実装内容に大きな相違がないかご確認ください。
関連情報
- ActiveReports for .NETを使用して作成した アプリケーションを実行環境に配布する際の作業内容・注意事項について
- 製品のバージョン(アセンブリバージョン)を調べる方法は?
- Webブラウザ内にPDFが表示されません。
キーワード
問題 印刷・プレビュー Web