Partager via


Événements faiblement couplés

COM+ offre un modèle d'événements faiblement couplés qui prend en charge les appels de méthode ou les événements à liaison tardive entre l'éditeur et l'abonné d'une part et le système d'événement d'autre part. Au lieu d'interroger de façon répétée le serveur, le système d'événement avertit les parties intéressées dès que des informations deviennent disponibles.

Pour utiliser ce service, la classe d'événement et le récepteur d'événements doivent être directement ou indirectement dérivés de la classe System.EnterpriseServices.ServicedComponent.

Remarque   Pour créer des abonnements persistants ou transitoires entre le récepteur d'événements et la classe d'événement, utilisez les objets d'administration COM+ avec des scripts ou du code managé. Vous pouvez également créer des abonnements transitoires à l'aide de l'outil d'administration Services de composants accessibles à partir du Panneau de configuration Windows.

L'exemple suivant crée une interface d'événement, ILceMsg, une classe d'événement, un récepteur d'événements et un éditeur. La classe d'événement et le récepteur d'événements sont tous deux dérivés de l'interface ILceMsg.

Événement

Imports System
Imports System.IO
Imports System.Reflection
Imports System.EnterpriseServices
Imports System.Runtime.InteropServices

<assembly: ApplicationName("EventDemo")>
<assembly: ApplicationActivation(ActivationOption.Library)>
<assembly: AssemblyKeyFile("EventDemoSvr.snk")>

Namespace EventDemo
   Public Interface ILceMsg
      Sub EventMethod(message As String)
   End Interface    
      <EventClass()> _
      Public Class LceClass 
Inherits ServicedComponent Implements ILceMsg 
      Public Sub EventMethod(message As String) implements _
            ILceMsg.EventMethod
      End Sub 
   End Class 
    
   Public Class LceSink 
   Inherits ServicedComponent Implements ILceMsg 
      Public Sub EventMethod(message As String) implements _
            ILceMsg.EventMethod
         MessageBox.Show(message, "Event sink")
      End Sub
   End Class 
End Namespace 
[C#]
using System;
using System.IO;
using System.Reflection;
using System.EnterpriseServices;
using System.Runtime.InteropServices;

[assembly: ApplicationName("EventDemo")]
[assembly: ApplicationActivation(ActivationOption.Library)]
[assembly: AssemblyKeyFile("EventDemoSvr.snk")]

namespace EventDemo
{
    public interface ILceMsg
    {
        void EventMethod(string message);
    }

    [EventClass]
    public class LceClass : ServicedComponent, ILceMsg
    {
        public void EventMethod(string message){}
    }

    public class LceSink : ServicedComponent, ILceMsg
    {   
        public void EventMethod(string message)
        {
            MessageBox.Show(message, "Event sink");
        }
    }
}

Éditeur

Protected Sub Fire_Click(sender As Object, e As System.EventArgs)_
Handles fireEvent.Click
      Dim evt As ILceMsg = CType(New LceClass(), ILceMsg)
      evt.EventMethod("Hello events")
End Sub 
[C#]
protected void Fire_Click (object sender, System.EventArgs e)
{
      ILceMsg evt = (ILceMsg) new LceClass();
      evt.EventMethod("Hello events");
}

Voir aussi

Résumé des services COM+ disponibles |System.EnterpriseServices, espace de noms