作成日: 2020/04/15 最終更新日: 2021/12/07
文書種別
使用方法
詳細
- No Report Specified.
- レポートは利用できません。
- 必要なファイルが正しく配置されていない
- レポート生成処理で問題が発生している
- 仮想プリンタの設定が行われていない
- ロードバランサーやWebガーデンの構成にしている
- Session変数を経由してWebViewerコントロールにレポートを設定している
- 製品付属のサンプルを実行した場合の動作を確認する
1. 必要なファイルが正しく配置されていない
ActiveReports for .NETの動作に必要なファイルが正しく配置されているかどうかご確認ください。
配置すべきファイルや配置場所等については、こちらのナレッジ文書をご参照ください。
2. レポート生成処理で問題が発生している
WebViewerのReportプロパティにレポート(レポートのインスタンス)がセットされていない場合や、レポートが正常に生成されなかった場合に、冒頭に挙げたような問題が発生します。
たとえば、ifステートメントやtry-catchステートメントなどの分岐処理により、WebViewerコントロールのReportプロパティにレポートがセットされていないといったことはございませんでしょうか。現象発生時の処理内容をご確認ください。
また、レポートから32ビット限定のライブラリを参照しているにもかかわらず、64ビットアプリケーションとして動作するように設定されていることはありませんでしょうか。Webアプリケーションの場合、32ビットと64ビットのどちらで実行されるかは、IISの設定に依存します。IISの設定やビルドオプションなどを確認してください。
3. 仮想プリンタの設定が行われていない
セクションレポートの場合、レポート生成時にも実行環境(サーバー)に接続されたプリンタドライバから用紙サイズ等の情報を取得します。(その際に参照されるプリンタは、基本的にサーバーの「通常使うプリンタ」に指定されているプリンタになります。)
以下に該当する場合、レポートが正常に生成されないなどの問題が発生することがあります。
- 実行環境に適切なプリンタドライバが存在しない
- レポート内で指定している用紙サイズをプリンタドライバがサポートしていない
- 実行ユーザー(アプリケーションプールID)がプリンタドライバへのアクセス権限を持っていない
こうした問題を回避する方法として、仮想プリンタの機能があります。
仮想プリンタの設定を行った場合、プリンタドライバからの情報取得を行わず、任意のサイズでレポートを作成します。
レポートの作成前に、Document.PrinterクラスのPrinterNameプロパティに空文字""を設定することで、仮想プリンタ機能を使用できます。
このとき、デザイナ上での用紙サイズは「プリンタの規定値」を設定し、コード上で用紙サイズを設定することをおすすめいたします。
用紙サイズの設定方法については、こちらのナレッジ文書をご参照ください。
仮想プリンタは、レポートを生成する環境と表示・印刷する環境が異なるWebアプリケーションなどで非常に有効な方法です。もし、仮想プリンタの設定を行われていない場合には、実装した上で動作をご確認ください。
※仮想プリンタはセクションレポート限定の機能です。ページレポートの場合、上記のようにレポート生成時に実行環境上のプリンタを参照することはありません。
4. ロードバランサーやWebガーデンの構成にしている
WebViewerコントロールは、ロードバランサーやWebガーデンでの使用には対応しておりません。
WebViewerコントロールはレポートサービス(/api/reporting/)のAPIを使用してレポートを描画する仕様になっています。レポートを表示するときには複数のAPIを内部処理で呼び出しています。それらは全て同一のプロセスで処理される必要があります。
そのため、同一セッションからのリクエストが異なるサーバーやプロセスに割り振られる可能性のある構成では、WebViewerコントロールは正しく動作しません。
本動作はWebViewerコントロールの仕様上の制限事項となります。
こうした構成下でWebViewerコントロールを正しく動作させる機能・設定等は用意いたしておりません。
なお、ロードバランサーがスティッキーセッション(Sticky Sessions)に対応している場合は、同一セッションのリクエストが単一のサーバーで処理されるので、技術的にはWebViewerを使用可能と考えられます。
5. Session変数を経由してWebViewerコントロールにレポートを設定している
WebViewerコントロールにレポートを設定する場合、コード上でReportプロパティにレポートを設定することが可能です。
このとき、Reportプロパティに設定するレポートオブジェクトをSession変数(セッション変数)を経由して引き渡すと、不定期でAccessViolationException(※)の例外が発生する事例が報告されております。(この例外が発生した場合、アプリケーションの復旧にIISの再起動など必要となることも報告されております。)
※エラーメッセージの例
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
レポートオブジェクトをSession変数に一旦格納すると、レポートが意図しないタイミングで破棄されてしまう場合があり、その結果、前述のような問題が発生しているものと考えられます。
WebViewerコントロールに設定するレポートは、Session変数に格納しないようにしてください。
6. 製品付属のサンプルを実行した場合の動作を確認する
直接的な解決策ではありませんが、問題の原因が環境的な要因によるものか、そうでないかを切り分けるために、問題が発生している環境(サーバー)に製品付属のサンプルを配置して実行させた場合に、同様の現象が発生するかどうか、お試しください。
製品付属のサンプルについては、製品ヘルプの以下のトピックをご確認ください。
サンプル
Professional Webビューワ サンプル
サンプルプロジェクトで問題が発生しない場合には、お客様のアプリケーションの実装内容とサンプルの実装内容に相違がないかご確認ください。
関連情報
旧文書番号
85383