Condividi tramite


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:

  1. 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.

  2. 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.

  3. 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.

  1. Creare una classe di evento che supporti l'interfaccia IStockTicker, che dispone di un metodo, UpdateStock.

  2. Nel progetto sottoscrittore aggiungere una classe che implementa l'interfaccia IStockTicker.

  3. 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.

Registrazione di una sottoscrizione