Практическое руководство. Извлечение сообщений
Обновлен: Ноябрь 2007
Для извлечения списка сообщений можно использовать либо статические, либо динамические механизмы. При извлечении статического списка сообщений система возвращает массив объектов Message, представляющий все сообщения в очереди.
При извлечении динамического списка сообщений система возвращает объект MessageEnumerator, представляющий все сообщения в очереди. Объект MessageEnumerator — это курсор, инициализируемый в заголовке динамического списка. Порядок следования элементов в списке идентичен порядку следования сообщений в очереди согласно их приоритету. Курсор можно переместить в первое сообщение в очереди, вызвав метод MoveNext. После инициализации перечислителя метод MoveNext можно использовать для прохода вперед по оставшимся сообщениям. Добавив в метод MoveNext период ожидания, можно указать, следует ли ждать, пока сообщение станет доступным.
Поскольку перечислитель динамичен, он может получить доступ к сообщениям, добавляемым за текущей позицией курсора (например, из-за их низкого приоритета). Перечислитель не может получить доступ к сообщениям, которые добавляются перед текущей позицией курсора. С помощью объекта MessageEnumerator проход в обратном направлении невозможен. Курсор может двигаться только вперед. Метод Reset позволяет вернуть курсор назад в начало очереди.
Примечание. |
---|
Если экземпляр компонента MessageQueue имеет свойство DenySharedReceive со значением true, никакое другое приложение не может изменить сообщения в перечислителе, пока он подключен к очереди. |
Извлечение статического списка сообщений
Создайте экземпляр компонента MessageQueue и задайте в качестве значения свойства Path очередь, на которую необходимо сослаться. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.
Примечание. Если компонент создан в Обозревателе серверов, свойство Path автоматически настраивается на нужную очередь.
Создайте массив со ссылкой на класс Message для хранения результатов запроса.
Вызовите метод GetAllMessages.
Присвойте результаты созданному массиву.
В следующем фрагменте кода показано, как можно использовать функцию GetAllMessages для извлечения сообщений из очереди и отображения меток сообщений в окне списка. В данном примере подразумевается, что экземпляр компонента MessageQueue уже добавлен в приложение.
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); } }
Данный пример кода доступен также в качестве фрагмента кода IntelliSense. В окне выбора фрагмента кода он расположен в разделе Операционная система Windows > Очереди сообщений. Дополнительные сведения см. в разделе Практическое руководство. Вставка фрагментов в код (Visual Basic).
Извлечение динамического списка сообщений
Создайте экземпляр компонента MessageQueue и задайте в качестве значения свойства Path очередь, на которую необходимо сослаться. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.
Примечание. Если компонент создан в Обозревателе серверов, свойство Path автоматически настраивается на нужную очередь.
Создайте объект MessageEnumerator для хранения результатов запроса.
Вызовите метод GetEnumerator для класса MessageQueue.
Присвойте результаты объекту MessageEnumerator. Код может выглядеть следующим образом:
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());
См. также
Задачи
Практическое руководство. Получение очередей