サービス コンポーネントの登録
サービス コンポーネントは、COM+ アプリケーションによって管理されるため、サービス コンポーネントから COM+ アプリケーションにアクセスできる必要があります。アクセシビリティを確保するために、サービス コンポーネントは、次の登録要件および構成要件を満たしている必要があります。
- アセンブリには厳密な名前を割り当てます。追加情報については、「厳密な名前でのアセンブリへの署名」を参照してください。
- アセンブリは、Windows のレジストリに登録します。
- 特定の COM+ アプリケーションにタイプ ライブラリ定義を登録し、インストールします。
- プログラムで追加したサービスは、COM+ カタログに設定します。
サービス コンポーネントに便利な登録情報は、次のとおりです。
- COM+ アプリケーション ID
- アクティベーション タイプ
- 説明情報
COM+ アプリケーション ID
既存の COM+ 対象アプリケーションを名前または GUID で識別できます。.NET Framework サービス インストール ツールには、アプリケーション名を指定するための /appname: オプションが用意されています。アセンブリ レベルの ApplicationName 属性を使用してアプリケーション名を指定する方法を次の例で示します。
Imports System.EnterpriseServices
<assembly: ApplicationName("BankComponent")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationName("BankComponent")]
public class Account : ServicedComponent
{
static void Main()
{}
}
アセンブリに ApplicationID 属性 (または Guid 属性) を適用すると、次の例で示すように、そのアプリケーションについてのすべての検索は、アプリケーション名ではなく、GUID に基づいて実行されます。
Imports System.EnterpriseServices
<assembly: ApplicationName("BankComponent")>
< assembly: ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationName("BankComponent")]
[ assembly: ApplicationID("4fb2d46f-efc8-4643-bcd0-6e5bfa6a174c")]
public class Account : ServicedComponent
{
static void Main() {}
}
メモ 動的登録の場合、対象アプリケーションを指定する唯一の方法は、デザイン時に ApplicationNameAttribute、ApplicationIDAttribute、または GuidAttribute の各属性を指定することです。.NET インストール ツール (Regsvcs.exe) には、コンパイル時にアプリケーション名または GUID を指定するための /appname: スイッチが用意されています。また、Regsvcs.exe には、特定の COM+ パーティションを識別するための /parname: スイッチも用意されています。COM+ パーティション サービスは、Windows Server 2003 プラットフォーム上でだけ使用できます。
対象アプリケーションが識別されていない場合や見つからなかった場合は、登録機構が、アセンブリの完全名 (バージョン名なし) を使用してアプリケーションを作成します。
注意 COM+ パーティション サービスと共に ApplicationIDAttribute 属性を使用しないでください。COM+ パーティション サービスを使用する場合、ApplicationIDAttribute 属性を適用すると、パーティションを設定できません。COM+ パーティション サービスは、Windows Server 2003 プラットフォーム上でだけ使用できます。
アクティベーション タイプ
アクティベーション タイプは、サービス コンポーネントを呼び出し元のプロセス (ライブラリ) に作成するか、新しいプロセス (サーバー) に作成するかを決定します。アクティベーション タイプを指定するには、ApplicationActivationAttribute 属性を適用します。
****メモ ApplicationActivationAttribute 属性を Server に設定した場合は、サーバー アプリケーションを使用する前に Windows インストーラを使用して、そのサーバーが依存するすべてのアセンブリをグローバル アセンブリ キャッシュ (GAC) に追加する必要があります。追加しないと、アプリケーションによって例外が生成されます。また、ApplicationActivationAttribute 属性を Server に設定した場合は、サービス コンポーネントのすべてのパラメータを Serializable としてマークするか、MarshalByRefObject クラスから派生させる必要があります。このようにしないと、アプリケーションによって例外が生成されます。
アクティベーション タイプを "サーバー" に設定する方法を次の例で示します。
Imports System.EnterpriseServices
< assembly: ApplicationActivation(ActivationOption.Server)>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: ApplicationActivation(ActivationOption.Server)]
public class Account : ServicedComponent
{
static void Main() {}
}
説明情報
説明はオプションですが、類似のアセンブリを見分けるのに便利な場合があります。DescriptionAttribute 属性を適用してアセンブリに説明を設定する方法を次の例で示します。
Imports System.EnterpriseServices
< assembly: Description("BankComponent assembly")>
Public Class Account
Inherits ServicedComponent
Shared Sub Main()
End Sub
End Class
[C#]
using System.EnterpriseServices;
[ assembly: Description("BankComponent assembly")]
public class Account : ServicedComponent
{
static void Main()
{}
}
このセクションの以降のトピックでは、COM+ のサービスを使用するアプリケーションを配置するための登録機構について説明します。
いずれの登録機構も、サービス コンポーネントを登録するのに必要な手順を結合することにより、登録プロセスを単純化します。いずれの登録機構を使用する場合も、コンポーネントのユーザーは管理者グループのメンバである必要があります。動的登録の場合は、登録情報をデザイン時に指定できます (後で定義します) が、一部はコンパイル時に指定できます。手動登録の場合は、登録情報をデザイン時、コンパイル時、および登録時に指定できます。登録情報を省略した場合は、登録プロセスによってメタデータから生成されます。登録プロセスは、矛盾する属性の組み合わせを検出し、場合によっては訂正します。
参照
サービス コンポーネントの作成 | サービス コンポーネントの概要 | ApplicationNameAttribute クラス | ApplicationIDAttribute クラス | GuidAttribute クラス | ApplicationActivationAttribute クラス | DescriptionAttribute クラス | COM+ サービスを設定する属性の適用 | サービス コンポーネントの例 | 利用可能な COM+ サービスの概要 | 属性を使用したメタデータの拡張 | System.EnterpriseServices