Partager via


Procédure d'implémentation d'un Queued Component qui affiche un message de façon asynchrone

Exemple de code

Le service COM+ Queued Components permet à une classe de composants d'être invoquée de façon asynchrone à l'aide de Microsoft Message Queuing. Pour plus d'informations sur les composants mis en file d'attente et dérivés de la classe System.EnterpriseServices.ServicedComponent, voir la rubrique sur Queued Components.

Pour implémenter un composant mis en file d'attente qui affiche un message de façon asynchrone

  1. Importez l'espace de noms System.EnterpriseServices.

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  2. Affectez à l'attribut ApplicationActivation la valeur ActivationOption.Server, puis activez la mise en file d'attente d'application et l'écouteur de file d'attente en définissant l'attribut d'assembly ApplicationQueuing comme illustré dans l'exemple de code suivant :

    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. Définissez une interface mise en file d'attente et appliquez l'attribut InterfaceQueuing à l'interface. Par exemple, le code suivant montre l'attribut InterfaceQueuing appliqué à l'interface IQComponent qui contient une seule méthode DisplayMessage.

    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. Définissez une classe qui dérive de la classe System.EnterpriseServices.ServicedComponent et qui implémente l'interface mise en file d'attente. Par exemple, l'exemple de code suivant permet de déclarer une classe nommée QComponent qui dérive de la classe System.EnterpriseServices.ServicedComponent et qui implémente l'interface IQComponent.

    Public Class QComponent 
        Inherits ServicedComponent Implements IQComponent 
        Public Sub DisplayMessage(msg As String) implements _
                              IQComponent.DisplayMessage
                MessageBox.Show(msg, "Processing message")
        End Sub
    End Class 
    
    public class QComponent  : ServicedComponent, IQComponent
    {
        public void DisplayMessage(string msg)
        {
            MessageBox.Show(msg, "Processing message");
        }
    }
    
  5. Créez une application cliente et testez le composant mis en file d'attente.

    1. Créez une variable dont le type de données est l'interface mise en file d'attente à partir de laquelle est dérivée la classe du composant mis en file d'attente.

      Dim iQc As IQComponent = Nothing
      
      IQComponent iQc = null;
      
    2. Effectuez une liaison au moniker correspondant à l'interface mise en file d'attente et appelez la méthode sur le composant mis en file d'attente pour afficher le message de façon asynchrone. Par exemple, le code suivant permet d'effectuer une liaison au composant mis en file d'attente qui correspond à l'interface IQComponent et permet d'appeler la méthode DisplayMessage pour afficher un message de façon asynchrone.

      Try
          iQc =
            CType(Marshal.BindToMoniker("queue:/new:QCDemo.QComponent"), _
                  IQComponent)
      Catch l as Exception
          Console.Writeline("Caught Exception: " & l.Message)
      End Try
      iQc.DisplayMessage(messageToSend.Text)
      Marshal.ReleaseComObject(iQc)
      
      IQComponent iQc = null;
      try
      {
          iQc = (IQComponent)
                 Marshal.BindToMoniker("queue:/new:QCDemo.QComponent");
      }
      catch
      {
          MessageBox.Show("Cannot create Queued Component");
      }
      iQc.DisplayMessage (messageToSend.Text);
      Marshal.ReleaseComObject(iQc);
      

Exemple

Imports System.Reflection
Imports System.EnterpriseServices
Imports System

<assembly: ApplicationName("QCDemoSvr")>
<assembly: ApplicationActivation(ActivationOption.Server)>
<assembly: ApplicationQueuing(Enabled := True, _
            QueueListenerEnabled := True)>
<assembly: AssemblyKeyFile("QCDemoSvr.snk")>

Namespace QCDemo
    <InterfaceQueuing>
    Public Interface IQComponent
       Sub DisplayMessage(msg As String)
    End Interface 
    
    Public Class QComponent 
    Inherits ServicedComponent Implements IQComponent 
        Public Sub DisplayMessage(msg As String) implements _
        IQComponent.DisplayMessage
            MessageBox.Show(msg, "Processing message")
        End Sub
    End Class 
End Namespace 
using System.Reflection;
using System.EnterpriseServices;

[assembly: ApplicationName("QCDemoSvr")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
[assembly: AssemblyKeyFile("QCDemoSvr.snk")]

namespace QCDemo
{
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }

    public class QComponent  : ServicedComponent, IQComponent
    {
        public void DisplayMessage(string msg)
        {
            MessageBox.Show(msg, "Processing message");
        }
    }
} 

Voir aussi

Référence

System.EnterpriseServices Namespace

Concepts

Résumé des services COM+ disponibles
Queued Components

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.