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
Importe el espacio de nombres System.EnterpriseServices.
Imports System.EnterpriseServices
using System.EnterpriseServices;
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)]
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étodoDisplayMessage
.<InterfaceQueuing> Public Interface IQComponent Sub DisplayMessage(msg As String) End Interface
[InterfaceQueuing] public interface IQComponent { void DisplayMessage(string msg); }
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 interfazIQComponent
.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"); } }
Cree una aplicación cliente y pruebe el componente en cola.
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;
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étodoDisplayMessage
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.