Tutorial: Crear una cola y trabajar con mensajes
Actualización: noviembre 2007
Los procedimientos de este tema muestran el proceso de creación de una cola de mensajes mediante el componente MessageQueue. Mediante ese componente, puede enviar mensajes a la cola y recuperarlos de ella. Los mensajes registran solicitudes de ayuda.
Nota: |
---|
Para ver información sobre colas en el Explorador de servidores o para obtener acceso a las colas mediante programación, debe instalar el componente de Windows Servicios de Message Queue Server en el equipo cliente. Para agregar este servicio, use Agregar o quitar programas en el Panel de control. |
Nota: |
---|
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio. |
Para crear una cola de mensajes en el equipo
En el menú Archivo, elija Nuevo y haga clic en Proyecto.
En el cuadro de diálogo Nuevo proyecto, cree una Aplicación para Windows de Visual Basic o Visual C#. Asígnele el nombre MessageQ.
Abra el Explorador de servidores. Para obtener más información, vea Cómo: Tener acceso e inicializar el Explorador de servidores o el Explorador de bases de datos.
Expanda el nodo Servidores.
Expanda el nodo del servidor local. El nodo de este servidor se identifica mediante el nombre del equipo.
Expanda el nodo Colas de mensajes.
Haga clic con el botón secundario en Colas privadas y, a continuación, haga clic en Crear cola.
Escriba HelpRequest como nombre para la cola. No seleccione Crear transaccional.
Se crea una nueva cola privada denominada HelpRequest que aparece en el Explorador de servidores.
Nota: También puede ver la cola recién creada mediante el icono Mi PC. Haga clic con el botón secundario en el icono Mi PC del escritorio y, a continuación, haga clic en Administrar. Expanda el nodo Servicios y Aplicaciones. Expanda el nodo Message Queue Server y seleccione la carpeta Colas privadas. La nueva cola aparece en la lista de colas.
Para agregar un componente MessageQueue para la cola de mensajes
Arrastre la cola HelpRequest desde el Explorador de servidores hasta el formulario. Se agregará al proyecto un nuevo componente MessageQueue configurado para la cola HelpRequest.
El componente MessageQueue se utiliza para obtener acceso mediante programación a los mensajes contenidos en la cola HelpRequest creada en la sección anterior.
Asigne a la propiedad (Name) del componente MessageQueue el valor helpRequestQueue.
En la ventana Propiedades, expanda el nodo MessageReadPropertyFilter. Asigne a la propiedad Priority el valor true. Esto hace que se recupere la prioridad del mensaje al recuperar un mensaje de la cola.
La interfaz de usuario que se va a crear en el siguiente procedimiento permite al usuario escribir texto para una solicitud de ayuda y establecer la prioridad del mensaje. El usuario hace clic en un botón Send (Enviar) para enviar la solicitud a la cola. Un control DataGridView muestra el contenido de la cola. La interfaz de usuario también incluye botones para actualizar la cuadrícula con el contenido actual de la cola y para vaciar la cola.
Para crear la interfaz de usuario
En la ficha Windows Forms del Cuadro de herramientas, agregue los siguientes controles a Form1:
Dos controles Label
Dos controles TextBox
Tres controles Button
Un control CheckBox
Un DataGridView
Defina las siguientes propiedades de los controles:
Control
Propiedad
Valor nuevo
Label1
Name
Label2
Message
TextBox1
txtName
(En blanco)
TextBox2
txtMessage
(En blanco)
true
Button1
sendMessage
Enviar mensaje
Button2
refreshMessages
Actualizar lista de mensajes
Button3
purgeMessages
Eliminar mensajes
CheckBox1
highPriority
Prioridad alta
DataGridView1
messageGrid
Organice los controles de forma ordenada.
Para enviar un mensaje a la cola
En el diseñador, haga doble clic en el botón sendMessage para crear el controlador de eventos Click en el Editor de código.
Agregue código al método para crear una nueva instancia del objeto Message y enviarla a la cola, y actualizar la vista del mensaje. En el siguiente paso, escribirá el método DisplayMessages.
Private Sub sendMessage_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles sendMessage.Click Dim theMessage As System.Messaging.Message = _ New System.Messaging.Message(Me.txtMessage.Text) theMessage.Label = Me.txtName.Text If highPriority.Checked Then theMessage.Priority = Messaging.MessagePriority.Highest Else theMessage.Priority = Messaging.MessagePriority.Normal End If helpRequestQueue.Send(theMessage) DisplayMessages() End Sub
private void sendMessage_Click(object sender, System.EventArgs e) { System.Messaging.Message theMessage = new System.Messaging.Message(txtMessage.Text); theMessage.Label = txtName.Text; if (highPriority.Checked) theMessage.Priority = System.Messaging.MessagePriority.Highest; else theMessage.Priority = System.Messaging.MessagePriority.Normal; helpRequestQueue.Send(theMessage); DisplayMessages(); }
Agregue una referencia a System.Data al proyecto. Agregue una instrucción Instrucción Imports (Tipo y espacio de nombres de .NET) (Visual Basic) o una instrucción using (Referencia de C#) para System.Data. Para obtener más información, vea Administrar referencias y Cómo: Agregar o quitar referencias en Visual Studio (Visual Basic).
Agregue un método para mostrar el contenido de la cola en el control DataGridView. Este método utiliza el método MessageQueue.GetAllMessages para recuperar todos los mensajes de la cola. Las propiedades seleccionadas de la cola se agregan a un objeto DataTable, que se utiliza como origen de datos para el control DataGridView. Para recuperar el texto del mensaje, deberá crear un formateador para el mensaje.
Private Sub DisplayMessages() ' Create a DataTable Dim messageTable As New DataTable() messageTable.Columns.Add("Name") messageTable.Columns.Add("Message") messageTable.Columns.Add("Priority") Dim messages() As System.Messaging.Message messages = helpRequestQueue.GetAllMessages() ' Need a formatter to get the text of the message body. Dim stringFormatter As System.Messaging.XmlMessageFormatter = _ New System.Messaging.XmlMessageFormatter(New String() _ {"System.String"}) Dim index As Integer Dim am As System.Messaging.Message ' Add each message to the DataTable For index = 0 To messages.Length - 1 messages(index).Formatter = stringFormatter am = messages(index) messageTable.Rows.Add(New String() _ {am.Label, am.Body.ToString(), am.Priority.ToString()}) Next messageGrid.DataSource = messageTable End Sub
private void DisplayMessages() { DataTable messageTable = new DataTable(); messageTable.Columns.Add("Name"); messageTable.Columns.Add("Message"); messageTable.Columns.Add("Priority"); System.Messaging.Message[] messages; messages = helpRequestQueue.GetAllMessages(); System.Messaging.XmlMessageFormatter stringFormatter; stringFormatter = new System.Messaging.XmlMessageFormatter( new string[] {"System.String"}); for (int index = 0; index < messages.Length; index++) { messages[index].Formatter = stringFormatter; messageTable.Rows.Add(new string[] { messages[index].Label, messages[index].Body.ToString(), messages[index].Priority.ToString() }); } messageGrid.DataSource = messageTable;
}
Para mostrar el contenido de la cola
En el diseñador, haga doble clic en el botón refreshMessage para crear el controlador de eventos Click en el Editor de código.
Dentro del controlador de eventos Click, llame al método DisplayMessages.
Private Sub refreshMessages_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles refreshMessages.Click DisplayMessages() End Sub
private void refreshMessages_Click(object sender, System.EventArgs e) { DisplayMessages();
}
Para borrar el contenido de la cola
En el diseñador, haga doble clic en el botón purgeMessage para crear el controlador de eventos Click en el Editor de código.
Llame al método Purge de helpRequestQueue y actualice el contenido del control DataGridView.
Private Sub purgeMessages_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles purgeMessages.Click helpRequestQueue.Purge() DisplayMessages() End Sub
private void purgeMessages_Click(object sender, System.EventArgs e) { helpRequestQueue.Purge(); DisplayMessages();
}
Para probar la aplicación
Presione F5 para ejecutar la aplicación.
Escriba su nombre y un mensaje breve.
Haga clic en Enviar mensaje para enviar el mensaje a la cola y actualizar la presentación en pantalla.
Haga clic en Purgar mensajes para eliminar todos los mensajes de la cola. La lista de mensajes aparecerá vacía.
Vea también
Tareas
Cómo: Crear instancias de componentes MessageQueue