Freigeben über


Registrieren eines vorübergehenden Abonnements

Vorübergehende Abonnements fordern ein Ereignis für ein bestimmtes Abonnentenobjekt an, das bereits vorhanden ist. Vorübergehende Abonnements werden im COM+-Katalog gespeichert, aber das Abonnement wird gelöscht, wenn das Ereignissystem oder das Betriebssystem beendet wird. Im Gegensatz zu persistenten Abonnements sind vorübergehende Abonnements an ein bestimmtes Objekt gebunden und werden nur im Ereignissystem gespeichert. Wenn ein Problem mit dem Ereignissystem oder Betriebssystem auftritt, verschwindet das Abonnement. Vorübergehende Abonnements können effizienter sein als persistente Abonnements, aber Sie müssen deren Objektlebenszyklus verwalten.

Vorübergehende Abonnements können nicht mit dem Component Services-Verwaltungstool festgelegt werden. Sie müssen die COM+-Verwaltungsschnittstellen verwenden, um ein vorübergehendes Abonnement zu erstellen oder zu aktualisieren.

Visual Basic

Im folgenden Verfahren wird beschrieben, wie Sie mithilfe von Microsoft Visual Basic ein vorübergehendes Abonnement erstellen:

  1. Geben Sie ein Abonnement als vorübergehend an, indem Sie der TransientSubscriptions-Auflistung einen neuen Eintrag hinzufügen und die SubscriberInterface-Eigenschaft auf die IUnknown-Schnittstelle des Abonnentenobjekts festlegen. COM+-Ereignisse erstellt beim Auslösen eines Ereignisses keine neue instance des Abonnentenobjekts, sondern verwendet stattdessen die von Ihnen angegebene instance. COM+-Ereignisse enthält eine Verweisanzahl für das Abonnentenobjekt, bis das Abonnement aus dem System entfernt wird.

  2. Erstellen Sie eine COM+-Serveranwendung (eine .exe, eine .dll oder eine OCX-Datei) mit einem Objekt, das die Schnittstellen oder Methoden implementiert, die Sie abonnieren möchten.

  3. Erstellen Sie Ihr vorübergehendes Abonnement mit dem folgenden Code, indem Sie die CLSID des Ereignisklassenobjekts und die instance des Abonnentenobjekts übergeben. Mithilfe des Component Services-Verwaltungstools können Sie die EventCLSID-Eigenschaft abrufen, indem Sie mit der rechten Maustaste auf die COM+-Komponente klicken, Eigenschaften auswählen und die Registerkarte Allgemein auswählen.

    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
    

Im folgenden Beispiel wird veranschaulicht, wie die CreateTransientSubscription-Funktion aufgerufen wird, um eine Schnittstelle namens IStockTicker zu abonnieren, die über eine Methode namens UpdateStock verfügt.

  1. Erstellen Sie eine Ereignisklasse, die die IStockTicker-Schnittstelle unterstützt, die über eine Methode, UpdateStock, verfügt.

  2. Fügen Sie in Ihrem Abonnentenprojekt eine Klasse hinzu, die die IStockTicker-Schnittstelle implementiert.

  3. Wenn Sie abonnieren möchten, führen Sie den folgenden Code aus:

    Dim oMyTicker As Object
    Dim sSubscriptionID As String
    Set oMyTicker = CreateObject("TheProject.CMyTicker")
    sSubscriptionID = CreateTransientSubscription( _
      "{..CLSID for the Event Class..}", oMyTicker)
    

Die CreateTransientSubscription-Funktion gibt eine Zeichenfolge zurück, bei der es sich um eine GUID handelt, die als Handle oder Als Cookie verwendet werden kann, um das Abonnement später zu widerrufen. Um das Abonnement zu entfernen, rufen Sie die Remove-Methode von COMAdminCatalogCollection für die TransientSubscriptions-Auflistung auf, und übergeben Sie den Index, der dem Abonnement mit der zuvor empfangenen GUID entspricht.

Registrieren eines Abonnements