一時的なサブスクリプションの登録
一時的なサブスクリプションは、既に存在する特定のサブスクライバー オブジェクトのイベントを要求します。 一時的なサブスクリプションは COM+ カタログに格納されますが、イベント システムまたはオペレーティング システムが停止した場合、サブスクリプションは削除されます。 永続的なサブスクリプションとは異なり、一時的なサブスクリプションは特定のオブジェクトに関連付けられ、イベント システムにのみ格納されます。 イベント システムまたはオペレーティング システムに問題がある場合、サブスクリプションは消滅します。 一時的なサブスクリプションは永続的なサブスクリプションよりも効率的ですが、オブジェクトのライフ サイクルを管理する必要があります。
コンポーネント サービス管理ツールを使用することにより、一時的なサブスクリプションを設定することはできません。 COM+ 管理インターフェイスを使用して、一時的なサブスクリプションを作成または更新する必要があります。
Visual Basic
次の手順では、Microsoft Visual Basic を使用して一時的なサブスクリプションを作成する方法について説明します。
TransientSubscriptions コレクションに新しいエントリを追加し、サブスクライバー オブジェクトの IUnknown インターフェイスに SubscriberInterface プロパティを設定することにより、サブスクリプションを一時的と指定します。 COM+ イベントは、イベントの発生時にサブスクライバー オブジェクトの新しいインスタンスを作成せず、代わりに指定されたインスタンスを使用します。 COM+ イベントは、サブスクリプションがシステムから削除されるまで、サブスクライバー オブジェクトの参照カウントを保持します。
サブスクライブするインターフェイスまたはメソッドを実装するオブジェクトを含む COM+ サーバー アプリケーション (.exe、.dll、または .ocx ファイル) を作成します。
イベント クラス オブジェクトの CLSID とサブスクライバー オブジェクトのインスタンスを渡すことにより、次のコードを使用して一時的なサブスクリプションを作成します。 コンポーネント サービス管理ツールを使用すると、COM+ コンポーネントを右クリックして、[プロパティ] を選択し、[全般] タブを選択することにより、EventCLSID プロパティを取得できます。
Public Function CreateTransientSubscription( _ ByVal clsid As String, ByVal objref As Object) As String Dim oCOMAdminCatalog As COMAdmin.COMAdminCatalog Dim oTSCol As COMAdminCatalogCollection Dim oSubscription As ICatalogObject Dim objvar As Variant On Error GoTo CreateTransientSubscriptionError Set oCOMAdminCatalog = CreateObject("COMAdmin.COMAdminCatalog") 'Gets the TransientSubscriptions collection Set oTSCol = oCOMAdminCatalog.GetCollection( _ "TransientSubscriptions") Set oSubscription = oTSCol.Add Set objvar = objref oSubscription.Value("SubscriberInterface") = objref oSubscription.Value("EventCLSID") = clsid oSubscription.Value("Name") = "TransientSubscription" oTSCol.SaveChanges CreateTransientSubscription = oSubscription.Value("ID") Set oSubscription = Nothing Set oTSCol = Nothing Set oCOMAdminCatalog = Nothing Set objvar = Nothing Exit Function CreateTransientSubscriptionError: CreateTransientSubscription = "" Err.Raise Err.Number, "[CreateTransientSubscription]" & _ Err.Source, Err.Description End Function
次の例は、CreateTransientSubscription 関数を呼び出して、UpdateStock というメソッドを持つ、IStockTicker というインターフェイスをサブスクライブする方法を示しています。
1 つのメソッド UpdateStock を持つインターフェイス IStockTicker をサポートするイベント クラスを作成します。
サブスクライバー プロジェクトで、IStockTicker インターフェイスを実装するクラスを追加します。
サブスクライブする場合、次のコードを実行します。
Dim oMyTicker As Object Dim sSubscriptionID As String Set oMyTicker = CreateObject("TheProject.CMyTicker") sSubscriptionID = CreateTransientSubscription( _ "{..CLSID for the Event Class..}", oMyTicker)
CreateTransientSubscription 関数は文字列を返します。これは、後でサブスクリプションを取り消すためのハンドルまたは Cookie として使用できる GUID です。 サブスクリプションを削除するには、TransientSubscriptions コレクションで COMAdminCatalogCollection の Remove メソッドを呼び出し、以前に受け取った GUID を持つサブスクリプションに対応するインデックスを渡します。
関連トピック