実行状態の識別
Hypertext Transfer Protocol (HTTP) はコネクションレスおよびステートレス プロトコルです。つまり、同じクライアントから異なる要求が来ているかどうかは自動的に検出されません。さらに、ページまたはサイトを表示している 1 つのブラウザーが現在アクティブであるかどうかも、自動的には示されません。 セッションが論理接続を作成し、HTTP を介したサーバーとクライアント間の状態を保持します。 特定のセッションに関連するユーザー固有情報は、セッション状態と呼ばれます。
セッション管理には、HTTP 要求を同じセッションから生成された他の以前の要求と相関させることが含まれます。 セッション管理を使用しないと、HTTP プロトコルがコネクションレスでステートレスな性質であるため、このような要求がレポート サーバー Web サービスと関係なく表示されます。
Reporting Services には、ASP.NET におけるようなセッション状態の全体的な概念はありません。 ただし、レポートを実行する場合に、レポート サーバーは実行の形式でメソッド呼び出し間で状態を保持します。 実行によって、レポート サーバーからレポートを読み込む、レポートの資格情報とパラメーターを設定する、レポートを表示するなど、ユーザーが複数の方法でレポートと対話することができます。
レポート サーバーと通信中は、クライアントが実行を使用して、レポートの表示、ユーザーによるレポートの他のページへのナビゲーション、およびレポートのセクションの表示と非表示を管理します。 クライアント アプリケーションが実行しているレポートごとに、固有の実行が存在します。
一般的に、ユーザーがブラウザーまたはクライアント アプリケーションにナビゲートし、表示するレポートを選択したときに、実行の有効期間が開始します。 実行に対する最後の要求が受信された後にタイムアウト時間が経過すると、実行が破棄されます。既定のタイムアウトは 20 分です。
Web サービスのタイムアウトが開始するのは、レポート サーバー Web サービス LoadReport、LoadReportDefinition、または Render メソッドが呼び出されたときです。 アプリケーションは、他のメソッドを使用してアクティブな実行を操作できます (パラメーターの設定やデータ ソースの設定など)。 実行に対する最後の要求が受信された後にタイムアウト時間が経過すると、実行が破棄されます。既定のタイムアウトは 20 分です。
アプリケーションは、ExecutionID (LoadReport メソッドと LoadReportDefinition メソッドの SOAP ヘッダーで返される) を保存することによって、Web サービスの Render メソッドと RenderStream メソッド間の複数のアクティブな実行を追跡します。
次のダイアグラムは、レポートに対する処理と表示のパスを示しています。
上記のような関数をサポートするために、現在の SOAP Render メソッドを複数のメソッドに分割して、初期化フェーズ、処理フェーズ、および表示フェーズの実行を網羅しました。
プログラムによってレポートを表示するには、次の操作を行う必要があります。
LoadReport または LoadReportDefinition を使用して、レポートまたはレポート定義を読み込みます。
レポートに資格情報またはパラメーターが必要かどうかを確認します。このとき、LoadReport または LoadReportDefinition によって返された ExecutionInfo オブジェクトの CredentialsRequired プロパティと ParametersRequired プロパティの値を確認します。
必要に応じて、SetExecutionCredentials メソッドおよび SetExecutionParameters メソッドを使用して、資格情報またはパラメーター、あるいはその両方を設定します。
Render メソッドを呼び出してレポートを表示します。
レポートがセッション中の間は、レポート サーバー データベースに格納された基になるレポートを変更できます。 たとえば、レポート定義の変更、レポートの削除や移動、ユーザー権限の変更ができます。 レポートがアクティブなセッション中の場合は、基になるレポート (レポート サーバー データベースに格納されたレポート) への変更による影響を受けません。
URL アクセス コマンドを使用して、レポート セッションを管理することもできます。