次の方法で共有


一時的なサブスクリプションの登録

一時的なサブスクリプションは、既に存在する特定のサブスクライバー オブジェクトのイベントを要求します。 一時的なサブスクリプションは COM+ カタログに格納されますが、イベント システムまたはオペレーティング システムが停止した場合、サブスクリプションは削除されます。 永続的なサブスクリプションとは異なり、一時的なサブスクリプションは特定のオブジェクトに関連付けられ、イベント システムにのみ格納されます。 イベント システムまたはオペレーティング システムに問題がある場合、サブスクリプションは消滅します。 一時的なサブスクリプションは永続的なサブスクリプションよりも効率的ですが、オブジェクトのライフ サイクルを管理する必要があります。

コンポーネント サービス管理ツールを使用することにより、一時的なサブスクリプションを設定することはできません。 COM+ 管理インターフェイスを使用して、一時的なサブスクリプションを作成または更新する必要があります。

Visual Basic

次の手順では、Microsoft Visual Basic を使用して一時的なサブスクリプションを作成する方法について説明します。

  1. TransientSubscriptions コレクションに新しいエントリを追加し、サブスクライバー オブジェクトの IUnknown インターフェイスに SubscriberInterface プロパティを設定することにより、サブスクリプションを一時的と指定します。 COM+ イベントは、イベントの発生時にサブスクライバー オブジェクトの新しいインスタンスを作成せず、代わりに指定されたインスタンスを使用します。 COM+ イベントは、サブスクリプションがシステムから削除されるまで、サブスクライバー オブジェクトの参照カウントを保持します。

  2. サブスクライブするインターフェイスまたはメソッドを実装するオブジェクトを含む COM+ サーバー アプリケーション (.exe、.dll、または .ocx ファイル) を作成します。

  3. イベント クラス オブジェクトの 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. 1 つのメソッド UpdateStock を持つインターフェイス IStockTicker をサポートするイベント クラスを作成します。

  2. サブスクライバー プロジェクトで、IStockTicker インターフェイスを実装するクラスを追加します。

  3. サブスクライブする場合、次のコードを実行します。

    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 コレクションで COMAdminCatalogCollectionRemove メソッドを呼び出し、以前に受け取った GUID を持つサブスクリプションに対応するインデックスを渡します。

サブスクリプションの登録