Cómo: Recuperar mensajes
Actualización: noviembre 2007
Puede utilizar mecanismos estáticos o dinámicos de recuperación para recuperar una lista de mensajes. Cuando se recupera una lista estática de mensajes, el sistema devuelve una matriz de objetos Message que representa todos los mensajes de la cola.
Cuando se recupera una lista dinámica de mensajes, el sistema devuelve un objeto MessageEnumerator que representa todos los mensajes de la cola. Un objeto MessageEnumerator es un cursor, inicializado al principio de una lista dinámica. El orden de la lista es el mismo que el de los mensajes de la cola, de acuerdo con la prioridad de los mensajes. Para desplazar el cursor hasta el primer mensaje de la cola, puede llamar al método MoveNext. Una vez inicializado el enumerador, puede utilizar MoveNext para desplazarse hacia delante por los restantes mensajes. Para especificar si desea esperar a que haya un mensaje disponible, puede pasar como parámetro un tiempo de espera al método MoveNext.
Como el enumerador es dinámico, puede tener acceso a un mensaje anexado más allá de la posición actual del cursor (por ejemplo, debido a una prioridad baja). El enumerador no tiene acceso a un mensaje insertado delante de la posición actual del cursor. No se puede retroceder con una clase MessageEnumerator. Un cursor sólo permite el movimiento hacia delante. El método Reset permite situar de nuevo el cursor al principio de la cola.
Nota: |
---|
Si crea una instancia de MessageQueue con DenySharedReceive establecido en true, ninguna otra aplicación puede modificar los mensajes en el enumerador mientras siga conectado a la cola. |
Para recuperar una lista estática de mensajes
Cree una instancia del componente MessageQueue y establezca su propiedad Path en la cola a la que se desea hacer referencia. Para obtener más información, vea Cómo: Crear instancias de componentes MessageQueue.
Nota: Si ha creado el componente desde el Explorador de servidores, la propiedad Path se establecerá automáticamente en la ruta de acceso a dicha cola.
Cree una matriz que haga referencia a la clase Message para que contenga los resultados de la consulta.
Llame al método GetAllMessages.
Asigne los resultados a la matriz creada.
El código siguiente muestra cómo puede utilizarse la función GetAllMessages para recuperar los mensajes de una cola y mostrar las etiquetas de los mensajes en un cuadro de lista. Este ejemplo supone que se ha agregado una instancia del componente MessageQueue a la aplicación.
Private Sub button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles button1.Click Me.MessageQueue1.Path = ".\MyQueue" Dim msg() As System.Messaging.Message Dim i As Integer ' Retrieve the messages. msg = MessageQueue1.GetAllMessages() ' Clear the current contents of the list. Me.ListBox1.Items.Clear() ' Display the results. For i = 0 To msg.Length - 1 Me.ListBox1.Items.Add(msg(i).Label) Next End Sub
private void button1_Click(System.Object sender, System.EventArgs e) { messageQueue1.Path = ".\\MyQueue"; System.Messaging.Message[] msg; // Retrieve the messages. msg = messageQueue1.GetAllMessages(); // Clear the current contents of the list. this.listBox1.Items.Clear(); // Display the results. for (int i = 0; i < msg.Length; i++) { this.listBox1.Items.Add(msg[i].Label); } }
Este ejemplo de código también está disponible como fragmento de código de IntelliSense. En el selector de fragmentos de código, se encuentra en Sistema operativo Windows > Colas de mensajes. Para obtener más información, vea Cómo: Insertar fragmentos de código en el código (Visual Basic).
Para recuperar una lista dinámica de mensajes
Cree una instancia del componente MessageQueue y establezca su propiedad Path en la cola a la que se desea hacer referencia. Para obtener más información, vea Cómo: Crear instancias de componentes MessageQueue.
Nota: Si ha creado el componente desde el Explorador de servidores, la propiedad Path se establecerá automáticamente en la ruta de acceso a dicha cola.
Cree un objeto MessageEnumerator para que contenga los resultados de la consulta.
Llame al método GetEnumerator de la clase MessageQueue.
Asigne los resultados al objeto MessageEnumerator. El código podría tener el siguiente aspecto:
Dim mq As New System.Messaging.MessageQueue(".\MyQueue") Dim msgEnum As System.Messaging.MessageEnumerator msgEnum = CType(mq.GetMessageEnumerator2, System.Messaging.MessageEnumerator)
System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(); System.Messaging.MessageEnumerator msgEnum; mq.Path = @".\MyQueue"; msgEnum = (System.Messaging.MessageEnumerator)(mq.GetMessageEnumerator2());