はじめに
インターネットは数多くのネットワークアプリケーションが接続されることで成り立っていますが、このインターネットの世界で、Webサイトを訪れる数百万人のユーザーの要求に応えるべくWebアプリケーションをスケーラブルにしたいと思うのは当然のことです。COM+は、スケーラブルで、拡張性があり、保守可能な分散アプリケーションを作成するためのWindows DNA 2000アーキテクチャの中核要素です。ただし、.NETでは、COM+コンポーネントのことを「サービスコンポーネント」と呼んでいます。.NET戦略のたび重なる変更により、サービスコンポーネントの配置モデルは、従来のCOM+コンポーネントの配置方法とは異なっています。この記事では、.NET Frameworkに用意されている各種ツールを使ってサービスコンポーネントを配置する方法を学習します。また、配置モデルがサービスコンポーネントのタイプによってどう変わるかについても説明します。最後に、Windowsインストーラプロジェクトを使ってサービスコンポーネントの配置を自動化する方法を学習します。
Windows 2000のコンポーネントサービスは、エンタープライズアプリケーションのための機能を豊富に備えており、Web対応の分散アプリケーション開発に必要なすべての基本機能を提供します。COM+サービスはもともとCOMコンポーネントで使うために設計されたものですが、COM+ランタイムが提供するサービスは、オブジェクトプーリング、データベース接続プーリング、リソース共有、ロールベースセキュリティ、分散トランザクション処理の監視など、有益なものが多いので、.NETコンポーネントでも利用できれば便利です。
.NET Frameworkには、COM+サービスをアプリケーションに提供するために必要なすべてのクラスを含んだSystem.EnterpriseServicesという名前空間があります。COM+の概要については、TechNetの「Introduction to COM and COM+」を参照してください。
サービスコンポーネントのさまざまな配置方法の説明に入る前に、System.EnterpriseServices名前空間にある最も重要なクラスの1つ、ServicedComponent
クラスについて説明しましょう。
ServicedComponent
COM+サービスを利用する.NET
オブジェクトを作成するには、System.EnterpriseServices.ServicedComponent
クラスからオブジェクトを派生する必要があります。このクラスは、COM+ランタイムとシームレスにやり取りするためのメソッドをオブジェクトに提供し、これによってオブジェクトはCOM+サービスを利用できるようになります。サービスコンポーネントの配置を説明するに当たって、サーバーアプリケーションとライブラリアプリケーションの違いを理解しておく必要があります。基本的に、COM+ライブラリアプリケーションは、そのライブラリアプリケーションを作成するクライアントのプロセスで実行されるのに対し、COM+サーバーアプリケーションは、COM+実行可能ファイル(dllhost.exe)のプロセス空間で実行されます。
サービスコンポーネントのさまざまな配置方法(前編)
COMコンポーネントをコンパイルすると、そのコンポーネントをCOM+にインストールするために必要な全情報を含んだタイプライブラリが作成されます。一方、.NETコンポーネントをコンパイルすると、マニフェスト、MSIL、メタデータなどを含んだアセンブリが作成されます。アセンブリは、タイプライブラリとはまったく異なるものです。そのため、アセンブリからタイプライブラリを作成し、アセンブリをCOM+にシームレスにインストールできるようする必要があります。
Windows 2000のコンポーネントサービスに.NETコンポーネントを配置するには、次の3とおりの方法があります。
- Regsvcsコマンドラインユーティリティを使う
- .NET Frameworkに用意されている自動登録メカニズムを使う
- System.EnterpriseServices名前空間の一部であるRegistrationHelperクラスを使う
RegistrationHelper
クラスのInstallAssembly
メソッドを使って、コードからCOM+に.NET
オブジェクトを登録することができます。アセンブリは、COM+に配置するだけでなく、次のいずれかの場所にも配置しなければなりません。
- クライアントアプリケーションのプライベートbinディレクトリ
- 共有の場所(GAC)
ライブラリアプリケーションにサービスコンポーネントを配置する場合は1つ目の配置方法(プライベート配置)を検討し、サーバーアプリケーションにサービスコンポーネントを配置する場合は2つ目の配置方法(GACに配置)を検討します。
サービスコンポーネントを使う前に、アセンブリに厳密に署名するためのキーファイルが必要です。キーファイルを生成するには、まず-kスイッチを使ってsn.exe(厳密名ユーティリティ)を実行します。この結果、公開/秘密キーのペアを含むファイルが作成されます。次に、公開/秘密キーのペアでアセンブリに署名し、「Assemblyinfo.cs」ファイルに<assembly: AssemblyKeyFile("..\\..\\LibraryApp.snk")>
という行を追加します。
では、COM+ライブラリアプリケーションにサービスコンポーネントを配置する方法の説明から始めましょう。