Web アプリケーションでの SOAP API の使用

Reporting Services SOAP API からは、レポート サーバーのすべての機能にアクセスできます。SOAP API は Web サービスです。したがって、SOAP API に容易にアクセスし、エンタープライズ レポート機能をカスタム ビジネス アプリケーションに取り入れることができます。Microsoft Windows アプリケーションから SOAP API にアクセスするのと同じように、Web アプリケーションからレポート サーバー Web サービスにアクセスします。Microsoft.NET Framework を使用して、レポート サーバー Web サービスのプロパティとメソッドを公開するプロキシ クラスを生成できます。このクラスにより、使い慣れたインフラストラクチャとツールを使用して Reporting Services テクノロジに基づいたビジネス アプリケーションを構築できます。

Reporting Services レポート管理機能は、Windows アプリケーションからと同様に、Web アプリケーションからも簡単にアクセスできます。Web アプリケーションから、レポート サーバー データベースのアイテムの追加と削除、アイテム セキュリティの設定、レポート サーバー データベースのアイテムの変更、スケジューリングと配信の管理などを行うことができます。

権限借用の有効化

Web アプリケーションを構成する最初の手順は、Web サービス クライアントからの権限借用を有効にすることです。権限借用により、ASP.NET アプリケーションは代行するクライアントの ID を使用して実行できます。ASP.NET では Microsoft インターネット インフォメーション サービス (IIS) を使用してユーザーを認証し、ASP.NET アプリケーションに認証済みトークンを渡すか、ユーザーを認証できない場合は未認証トークンを渡します。どちらの場合も、権限借用が有効であれば、ASP.NET アプリケーションで受け取ったトークンの権限を借用します。クライアントの権限借用を有効にするには、次のようにクライアント アプリケーションの Web.config ファイルを変更します。

<!-- Web.config file. -->
<identity impersonate="true"/>
注意注意

既定では、権限借用は無効になっています。

ASP.NET の権限借用の詳細については、Microsoft.NET Framework SDK のマニュアルを参照してください。

SOAP API を使用したレポート サーバーの管理

Web アプリケーションを使用してレポート サーバーとその内容を管理することもできます。Reporting Services と共に含まれているレポート マネージャは、ASP.NET と Reporting Services SOAP API を使用して完全に構築された Web アプリケーションの一例です。レポート マネージャのレポート管理機能はカスタム Web アプリケーションに追加できます。たとえば、レポート サーバー データベースの利用可能なレポートの一覧を返し、ASP.NETListbox コントロールに表示して、ユーザーが選択できるようにすることができます。次のコードでは、レポート サーバー データベースに接続し、レポート サーバー データベースのアイテムの一覧を返します。利用可能なレポートは Listbox コントロールに追加され、各レポートのパスが表示されます。

Private Sub Page_Load(sender As Object, e As System.EventArgs)
   ' Create a Web service proxy object and set credentials
   Dim rs As New ReportingService2005()
   rs.Credentials = System.Net.CredentialCache.DefaultCredentials

   ' Return a list of catalog items in the report server database
   Dim items As CatalogItem() = rs.ListChildren("/", True)

   ' For each report, display the path of the report in a Listbox
   Dim ci As CatalogItem
   For Each ci In  items
      If ci.Type = ItemTypeEnum.Report Then
         catalogListBox.Items.Add(ci.Path)
      End If
   Next ci
End Sub ' Page_Load 
private void Page_Load(object sender, System.EventArgs e)
{
   // Create a Web service proxy object and set credentials
   ReportingService2005 rs = new ReportingService2005();
   rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

   // Return a list of catalog items in the report server database
   CatalogItem[] items = rs.ListChildren("/", true);

   // For each report, display the path of the report in a Listbox
   foreach(CatalogItem ci in items)
   {
      if (ci.Type == ItemTypeEnum.Report)
         catalogListBox.Items.Add(ci.Path);
   }
}