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:
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.
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.
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.
Erstellen Sie eine Ereignisklasse, die die IStockTicker-Schnittstelle unterstützt, die über eine Methode, UpdateStock, verfügt.
Fügen Sie in Ihrem Abonnentenprojekt eine Klasse hinzu, die die IStockTicker-Schnittstelle implementiert.
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.
Zugehörige Themen