É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