ReportViewer コントロールからレポート サーバーへの接続を指定するには、接続が確立される条件を知っておくと役に立ちます。
起動時に ReportViewer コントロールが含まれている Web ページを読み込むと、コントロールがレポート サーバーに接続し、レポート セッションを確立してレポート パラメータ プロパティを取得または設定し、サーバーで使用できる表示拡張機能の一覧を取得します。
コントロールが AsyncRendering=true を指定して実行されている場合、ページの表示後にレポートの HTML が IFrame オブジェクトによって非同期で取得されます。
レポートで外部の画像が参照されている場合、ReportViewer コントロールでは、ReportViewer HTTP ハンドラを使用した個別の要求を通じて画像が取得されます。各要求は、独自の接続で行われます。
レポートの表示後に表示レポートを別の形式にエクスポートする場合、追加の接続が行われる場合があります。エクスポート要求は、個別の接続を使用してブラウザからレポート サーバーに送信されます。
これらすべての操作が成功するかどうかは、レポート サーバーへの有効な接続情報が ReportViewer コントロールにあるかどうかで決まります。接続情報の指定方法は、フォーム認証、Windows 認証、現在のユーザーの資格情報、または ASP.NET セッションのいずれを使用しているかなどの要因によって異なります。
接続の指定方法
サーバーに接続するには、ServerReport オブジェクトのプロパティを設定するか、接続を設定するインターフェイスを実装して Web.config ファイルで実装を指定します。ReportViewer コントロールでは、常にまず Web.config ファイルが読み取られ、接続値が指定されている場合はその値が使用されます。
セッション状態が有効になっている場合、ServerReport オブジェクトのプロパティを設定するか Web.config ファイルで接続情報を指定するかを選択できます。Web.config で接続情報を指定する場合は、ServerReport オブジェクトのプロパティを設定しないでください。
セッション状態がオフになっている場合、IReportServerConnection または IReportServerConnection2 を実装して Web.config ファイルで実装を指定する必要があります。
[!メモ]
接続の確立に使用されるユーザー アカウントには、レポート サーバーに対する有効なロールの割り当てが必要です。システム レベルとアイテム レベルのロールの割り当てを両方とも使用すると、包括的な権限のセットを作成できます。レポート サーバーのロールの割り当てについて詳しく理解していない場合は、チュートリアルに従ってロールの割り当ての基礎を学習できます。詳細については、MSDN の「チュートリアル : Reporting Services での権限の設定」を参照してください。
ServerReport オブジェクトのプロパティの設定
デザイン時にコントロールを Web フォームにドラッグすると、ServerReport オブジェクトのレポート サーバーの URL およびタイムアウト プロパティを設定できます。
既定では、ReportViewer Web サーバー コントロールは、ASP.NET スレッドのユーザーとしてレポート サーバーに接続します。
別のユーザーとして接続するには (たとえば、すべてのユーザーが 1 つのユーザー アカウントを使用してレポート サーバーに接続できるようにする場合など)、シリアル化可能なオブジェクトに IReportServerCredentials を実装し、そのオブジェクトのインスタンスを ReportViewer.ServerReport.ReportServerCredentials に渡します。ReportViewer コントロールは ASP.NET ページの処理完了後にレポート サーバーに接続できるので、ASP.NET セッションが (SQL Server データベースなどに) アウト プロセスで格納される場合、オブジェクトは格納のためにシリアル化可能である必要があります。
ReportViewer.ServerReport.ReportServerCredentials プロパティを直接設定する方法には、次の 2 つの欠点があることに注意してください。
ASP.NET セッションを有効にする必要があります。
ページを表示するユーザーごとにオブジェクトのインスタンスが ReportViewer コントロールによってセッションに配置されるので、ASP.NET セッションが不必要に大きくなる可能性があります。
上記の欠点を回避するには、Web.config ファイルで IReportServerConnection2 の実装を指定します。
セッション状態がオフになっている場合に資格情報を指定する方法に関する推奨事項については、このトピックの「ASP.NET セッションがオフになっている場合の資格情報の格納に関するガイドライン」を参照してください。
Web.config でのレポート サーバー接続の指定
IReportServerConnection または IReportServerConnection2 を実装する場合、アプリケーションの Web.config ファイルで実装を指定する必要があります。Web.config ファイルは、接続情報と資格情報が含まれるオブジェクトの種類を示します。
[!メモ]
Web.config ファイルでは、IReportServerConnection2 または IReportServerConnection の実装を指定する必要があります。IReportServerCredentials は指定しないでください。IReportServerConnection2 は IReportServerCredentials から派生し、レポート サーバーの URL、タイムアウト値、および使用するカスタム Cookie または HTTP ヘッダーを指定するためのプロパティを追加します。
ASP.NET セッションがオフになっている場合は IReportServerConnection2 が必要ですが、オブジェクトをセッションに格納しないようにする場合は、ASP.NET セッションがオンになっているときにこのインターフェイスを使用することができます。詳細およびコード例については、IReportServerConnection2 のプログラミング リファレンス トピックを参照してください。Web.config でキーを追加する方法の詳細については、「ReportViewer 用の Web.config 設定」を参照してください。
次の表に、資格情報と接続情報を提供するインターフェイスを示します。
インターフェイス | 説明 |
---|---|
IReportServerCredentials |
このインターフェイスを使用すると、現在のユーザーとして接続しない場合に、レポート サーバーに接続するために ServerReport オブジェクトで使用する資格情報を指定できます。 既定では、ReportViewer コントロールは、ASP.NET スレッドのユーザーとしてレポート サーバーに接続します。 別のユーザーを指定するには、ReportViewer.ServerReport.ReportServerCredentials を IReportServerCredentials の独自の実装のインスタンスに設定します。 |
IReportServerConnection |
このインターフェイスは IReportServerCredentials から継承され、レポート サーバーの URL およびタイムアウト プロパティを指定するための追加メンバを提供します。 |
IReportServerConnection2 |
このインターフェイスは IReportServerConnection から継承され、カスタム Cookie またはヘッダーを指定するための追加メンバを提供します。レポート サーバーと共にシングル サインオン製品を使用している場合に役立ちます。 |
ASP.NET セッションがオフになっている場合の資格情報の格納に関するガイドライン
IReportServerConnection2 を実装する場合は、クラスにユーザー資格情報を格納しないでください。シリアル化可能なオブジェクトに資格情報を格納すると、ユーザー名とパスワードが ASP.NET セッションにシリアル化され、SQL Server データベースまたは別の状態サーバーに格納されます。資格情報のシリアル化は必ずしもセキュリティ上の危険を伴うとは限りませんが、資格情報をセッション データとして格納すると、外部からの攻撃を受けやすくなります。
次に、資格情報を他のセッション データと一緒に格納しないようにする方法の例を示します。
保存された資格情報を構成ファイルまたは他の構成ストアから読み取ります。詳細およびコード例については、IReportServerCredentials のプログラミング リファレンス トピックを参照してください。
クライアントによって異なる資格情報の提供を求める ASP.NET 要求から HTTP Cookie を読み取ります。
[!メモ]
資格情報をクラス以外に格納する方法は柔軟に選択できますが、同じレポート セッションの後続の要求に対して同じ資格情報が返されるようにする必要があります。
参照
リファレンス
IReportServerCredentials
IReportServerConnection2
概念
ReportViewer 用の Web.config 設定
非同期表示のための ReportViewer の構成
サーバー レポートの配置に関する注意事項
リモート処理用の ReportViewer の構成
ReportViewer コントロールの追加と設定