Share via


Cómo implementar un componente en cola que muestre un mensaje de manera asincrónica

Ejemplo de código

El servicio de componentes en cola de COM+ proporciona una manera de llamar a una clase de componente de manera asincrónica mediante Microsoft Message Queuing. Para obtener más información acerca de los componentes en cola derivados de la clase System.EnterpriseServices.ServicedComponent, vea Componentes en cola.

Para implementar un componente en cola que muestre un mensaje de manera asincrónica

  1. Importe el espacio de nombres System.EnterpriseServices.

    Imports System.EnterpriseServices
    
    using System.EnterpriseServices;
    
  2. Establezca el atributo ApplicationActivation ActivationOption.Server; habilite las colas de aplicación y el agente de escucha de colas estableciendo el atributo de ensamblado ApplicationQueuing, como se muestra en el siguiente código de ejemplo:

    <assembly: ApplicationActivation(ActivationOption.Server)>
    <assembly: ApplicationQueuing(Enabled := True, _
                QueueListenerEnabled := True)>
    
    [assembly: ApplicationActivation(ActivationOption.Server)]
    [assembly: ApplicationQueuing(Enabled=true, QueueListenerEnabled=true)]
    
  3. Defina una interfaz en cola y aplique el atributo InterfaceQueuing a la interfaz. Por ejemplo, en el siguiente código se muestra que el atributo InterfaceQueuing se aplica a la interfaz IQComponent que tiene un único método DisplayMessage.

    <InterfaceQueuing>
    Public Interface IQComponent
        Sub DisplayMessage(msg As String)
    End Interface
    
    [InterfaceQueuing]
    public interface IQComponent 
    {
        void DisplayMessage(string msg);
    }
    
  4. Defina una clase que se derive de la clase System.EnterpriseServices.ServicedComponent e implemente la interfaz en cola. Por ejemplo, en el siguiente código de ejemplo se declara una clase denominada QComponent que se deriva de la clase System.EnterpriseServices.ServicedComponent e implementa la interfaz 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. Cree una aplicación cliente y pruebe el componente en cola.

    1. Cree una variable cuyo tipo de datos sea la interfaz en cola de la que se deriva la clase de componente en cola.

      Dim iQc As IQComponent = Nothing
      
      IQComponent iQc = null;
      
    2. Enlace con el moniker correspondiente a la interfaz en cola y llame al método del componente en cola para mostrar el mensaje de forma asincrónica. Por ejemplo, en el siguiente código se enlaza con el componente en cola que corresponde a la interfaz IQComponent y se llama al método DisplayMessage para mostrar un mensaje de forma asincrónica.

      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);
      

Ejemplo

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");
        }
    }
} 

Consulte también

Referencia

System.EnterpriseServices Namespace

Conceptos

Resumen de los servicios COM+ disponibles
Componentes en cola

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.