Registrazione di una sottoscrizione temporanea
Le sottoscrizioni temporanee richiedono un evento per un oggetto sottoscrittore specifico già esistente. Le sottoscrizioni temporanee vengono archiviate nel catalogo COM+, ma la sottoscrizione viene eliminata se il sistema eventi o il sistema operativo viene arrestato. A differenza delle sottoscrizioni permanenti, le sottoscrizioni temporanee sono associate a un particolare oggetto e vengono archiviate solo nel sistema eventi. Se si verifica un problema con il sistema eventi o il sistema operativo, la sottoscrizione scompare. Le sottoscrizioni temporanee possono essere più efficienti delle sottoscrizioni persistenti, ma è necessario gestire i cicli di vita degli oggetti.
Le sottoscrizioni temporanee non possono essere impostate tramite lo strumento di amministrazione di Servizi componenti. È necessario utilizzare le interfacce amministrative COM+ per creare o aggiornare una sottoscrizione temporanea.
Visual Basic
La procedura seguente descrive come creare una sottoscrizione temporanea usando Microsoft Visual Basic:
Specificare una sottoscrizione come temporanea aggiungendo una nuova voce all'insieme TransientSubscriptions e impostando la proprietà SubscriberInterface sull'interfaccia IUnknown dell'oggetto sottoscrittore. Gli eventi COM+ non creano una nuova istanza dell'oggetto sottoscrittore durante la generazione di un evento, ma utilizzano invece l'istanza specificata. Gli eventi COM+ contiene un conteggio dei riferimenti per l'oggetto sottoscrittore fino a quando la sottoscrizione non viene rimossa dal sistema.
Creare un'applicazione server COM+ (un .exe, un .dll o un file con estensione ocx) con un oggetto che implementa le interfacce o i metodi a cui si vuole sottoscrivere.
Creare la sottoscrizione temporanea usando il codice seguente passando il CLSID dell'oggetto classe di evento e l'istanza dell'oggetto sottoscrittore. Usando lo strumento di amministrazione di Servizi componenti, è possibile ottenere la proprietà EventCLSID facendo clic con il pulsante destro del mouse sul componente COM+, selezionando Proprietà e selezionando la scheda Generale .
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
L'esempio seguente illustra come chiamare la funzione CreateTransientSubscription per sottoscrivere un'interfaccia denominata IStockTicker, che ha un metodo denominato UpdateStock.
Creare una classe di evento che supporti l'interfaccia IStockTicker, che dispone di un metodo, UpdateStock.
Nel progetto sottoscrittore aggiungere una classe che implementa l'interfaccia IStockTicker.
Quando si vuole sottoscrivere, eseguire il codice seguente:
Dim oMyTicker As Object Dim sSubscriptionID As String Set oMyTicker = CreateObject("TheProject.CMyTicker") sSubscriptionID = CreateTransientSubscription( _ "{..CLSID for the Event Class..}", oMyTicker)
La funzione CreateTransientSubscription restituisce una stringa, ovvero un GUID che può essere usato come handle o un cookie per revocare la sottoscrizione in un secondo momento. Per rimuovere la sottoscrizione, chiamare il metodo Remove di COM Amministrazione CatalogCollection nell'insieme TransientSubscriptions, passando l'indice corrispondente alla sottoscrizione con il GUID ricevuto in precedenza.
Argomenti correlati