Практическое руководство. Получение очередей
Обновлен: Ноябрь 2007
Для извлечения списка очередей можно использовать статические или динамические механизмы. При извлечении статического списка очередей система возвращает объект MessageQueue, содержащий результаты запроса. При извлечении динамического списка очередей система возвращает объект MessageQueueEnumerator, содержащий результаты запроса.
В отличие от объекта MessageEnumerator, в котором сообщения возвращаются в соответствии с их порядком в очереди, в объекте MessageQueueEnumerator не соблюдается никакого порядка при возврате очередей. Это происходит потому, что очереди в сети не упорядочены по компьютеру, метке или другим критериям, доступным для пользователя. Курсор можно переместить в первую очередь перечисления, вызвав метод MoveNext. После инициализации перечислителя метод MoveNext можно использовать для прохода вперед по оставшимся очередям.
С помощью объекта MessageQueueEnumerator проход в обратном направлении невозможен. Курсор может перемещаться только вперед по перечислению очередей. Однако для сброса перечисления и помещения курсора в начало списка можно вызвать метод Reset. Поскольку перечислитель динамичен, он может получать доступ к очередям, которые добавляются за текущей позицией курсора. К очереди, добавленной до текущей позиции курсора, без вызова метода Reset получить доступ нельзя.
Поскольку методы GetPublicQueues, GetPrivateQueuesByMachine и GetMessageQueueEnumerator статичны, создавать экземпляр класса MessageQueue перед вызовом этих методов не нужно.
Извлечение статического списка общих или частных очередей
Создайте массив типа MessageQueue для хранения результатов запроса.
Вызовите соответствующий метод для класса MessageQueue:
Для извлечения всех общих очередей без критериев вызовите метод GetPublicQueues.
Для извлечения общих очередей с критериями установите параметр Criteria в соответствующее значение и вызовите метод GetPrivateQueuesByMachine.
Для извлечения только тех общих очередей, которые имеют общую категорию GUID, вызовите метод GetPublicQueuesByCategory и установите категорию GUID в качестве параметра.
Для извлечения только тех общих очередей, которые имеют общую метку, вызовите метод GetPublicQueuesByLabel и установите метку в качестве параметра.
Для извлечении только тех общих очередей, которые находятся на определенном компьютере, вызовите метод GetPublicQueuesByMachine и укажите имя компьютера в качестве параметра.
Присвойте результаты массиву.
Например, в следующем коде показано, как поле списка можно использовать для отображения метки всех извлеченных общих очередей на локальном компьютере.
Private Sub button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles button1.Click Dim mqlist() As System.Messaging.MessageQueue Dim i As Integer ' Retrieve queues on the local machine. mqlist = System.Messaging.MessageQueue.GetPublicQueuesByMachine(".") ' Clear the current contents of the list. Me.ListBox1.Items.Clear() ' Display the results. For i = 0 To mqlist.Length - 1 Me.ListBox1.Items.Add(mqlist(i).Path) Next End Sub
private void button1_Click(System.Object sender, System.EventArgs e) { System.Messaging.MessageQueue[] mqlist; // Retrieve public queues. mqlist = System.Messaging.MessageQueue.GetPublicQueuesByMachine( "."); // Clear the current contents of the list. this.listBox1.Items.Clear(); // Display the results. for (int i = 0; i < mqlist.Length; i++) { this.listBox1.Items.Add(mqlist[i].Path); } }
Данный пример кода также доступен в виде фрагмента кода Visual Basic IntelliSense. В окне выбора фрагмента кода он расположен в разделе Операционная система Windows > Очереди сообщений. Дополнительные сведения см. в разделе Практическое руководство. Вставка фрагментов в код (Visual Basic).
Извлечение динамического списка очередей
Создайте объект MessageQueueEnumerator для хранения результатов запроса.
Вызовите метод GetMessageQueueEnumerator для класса MessageQueue.
Для извлечения подмножества очередей сети установите параметр MessageQueueCriteria на соответствующее значение.
Сохраните результаты в созданном объекте MessageQueueEnumerator. Код может выглядеть следующим образом:
Dim mqEnum As System.Messaging.MessageQueueEnumerator mqEnum = System.Messaging.MessageQueue.GetMessageQueueEnumerator()
System.Messaging.MessageQueueEnumerator mqEnum; mqEnum = System.Messaging.MessageQueue.GetMessageQueueEnumerator();
См. также
Задачи
Практическое руководство. Извлечение сообщений