Partager via


Inscription d’un abonnement temporaire

Les abonnements temporaires demandent un événement pour un objet abonné spécifique qui existe déjà. Les abonnements temporaires sont stockés dans le catalogue COM+, mais l’abonnement est supprimé si le système d’événements ou le système d’exploitation est arrêté. Contrairement aux abonnements persistants, les abonnements temporaires sont liés à un objet particulier et sont stockés uniquement dans le système d’événements. En cas de problème avec le système d’événements ou le système d’exploitation, l’abonnement disparaît. Les abonnements temporaires peuvent être plus efficaces que les abonnements persistants, mais vous devez gérer leurs cycles de vie d’objet.

Les abonnements temporaires ne peuvent pas être définis à l’aide de l’outil d’administration des services de composants. Vous devez utiliser les interfaces administratives COM+ pour créer ou mettre à jour un abonnement temporaire.

Visual Basic

La procédure suivante décrit comment créer un abonnement temporaire à l’aide de Microsoft Visual Basic :

  1. Spécifiez un abonnement comme temporaire en ajoutant une nouvelle entrée à la collection TransientSubscriptions et en définissant la propriété SubscriberInterface sur l’interface IUnknown de l’objet abonné. Les événements COM+ ne créent pas d’instance de l’objet abonné lors du déclenchement d’un événement, mais utilisent plutôt l’instance que vous spécifiez. Les événements COM+ contiennent un nombre de références pour l’objet abonné jusqu’à ce que l’abonnement soit supprimé du système.

  2. Créez une application serveur COM+ (un .exe, un .dll ou un fichier .ocx) avec un objet qui implémente les interfaces ou méthodes auxquelles vous souhaitez vous abonner.

  3. Créez votre abonnement temporaire à l’aide du code suivant, en transmettant le CLSID de l’objet de classe d’événements et l’instance de l’objet abonné. À l’aide de l’outil d’administration services de composants, vous pouvez obtenir la propriété EventCLSID en cliquant avec le bouton droit sur le composant COM+, en sélectionnant Propriétés et en sélectionnant l’onglet Général .

    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’exemple suivant montre comment appeler la fonction CreateTransientSubscription pour s’abonner à une interface appelée IStockTicker, qui a une méthode appelée UpdateStock.

  1. Créez une classe d’événements qui prend en charge l’interface IStockTicker, qui a une méthode, UpdateStock.

  2. Dans votre projet d’abonné, ajoutez une classe qui implémente l’interface IStockTicker.

  3. Lorsque vous souhaitez vous abonner, exécutez le code suivant :

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

La fonction CreateTransientSubscription retourne une chaîne, qui est un GUID qui peut être utilisé comme handle ou cookie pour révoquer l’abonnement ultérieurement. Pour supprimer l’abonnement, appelez la méthode Remove de COMAdminCatalogCollection sur la collection TransientSubscriptions , en transmettant l’index correspondant à l’abonnement avec le GUID précédemment reçu.

Inscription d’un abonnement