Пошаговое руководство. Создание очереди и работа с сообщениями
Обновлен: Ноябрь 2007
Содержащиеся в данном разделе процедуры описывают процесс создания очереди сообщений с помощью компонента MessageQueue. Этот компонент используется для отправки сообщений в очередь и получения сообщений из нее. В сообщениях будут передаваться запросы в гипотетическую службу поддержки.
![]() |
---|
Для просмотра данных очередей в обозревателе серверов или для осуществления программного доступа к очередям необходимо установить на клиентском компьютере компонент Windows Очереди сообщений. Для добавления этой службы используйте средство панели управленияУстановка и удаление программ. |
![]() |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Создание очереди сообщений на компьютере
В меню Файл откройте команду Создать и выберите Проект.
В диалоговом окне Новый проект создайте Приложение Windows на языке Visual Basic или Visual C#. Присвойте ему имя MessageQ.
Откройте обозреватель серверов. Дополнительные сведения см. в разделе Практическое руководство. Подключение и инициализация обозревателя серверов/обозревателя баз данных.
Разверните узел Серверы.
Откройте узел, соответствующий локальному серверу. Узел локального сервера можно определить по имени компьютера.
Откройте узел Очереди сообщений.
Щелкните правой кнопкой мыши Частные очереди и выберите команду Создать очередь.
В качестве имени очереди укажите HelpRequest. Не устанавливайте флажок Сделать очередь транзактной.
В обозревателе серверов будет создана и отображена новая частная очередь с именем HelpRequest.
Примечание.
Просмотреть новую очередь также можно с помощью значка Мой компьютер. Щелкните правой кнопкой мыши значок Мой компьютер на рабочем столе и выберите пункт Управление. Раскройте узел Службы и приложения. Откройте узел Очереди сообщений и выберите папку Частные очереди. В списке очередей будет присутствовать новая очередь.
Добавление компонента MessageQueue для очереди сообщений
Перетащите очередь HelpRequest из обозревателя серверов на форму. В проект будет добавлен новый компонент MessageQueue, настроенный для работы с очередью HelpRequest.
Компонент MessageQueue используется для программного доступа к сообщениям, содержащимся в очереди HelpRequest, которая была создана ранее.
В свойстве (Name) компонента MessageQueue укажите helpRequestQueue.
В окне Свойства разверните узел MessageReadPropertyFilter. Присвойте свойству Priority значение true. Это позволит получать приоритет сообщений при извлечении сообщений из очереди.
Пользовательский интерфейс, который будет создан далее, предоставит пользователям возможность ввода текста запроса в службу поддержки и выбора приоритета сообщения. Для отправки запроса в очередь пользователю необходимо будет нажать кнопку отправки. Содержимое очереди будет отображаться в представлении DataGridView. Кроме того, в пользовательском интерфейсе будут кнопки для отображения текущего содержания очереди в представлении и очистки очереди.
Создание пользовательского интерфейса
Добавьте в Form1 следующие элементы управления со вкладки Windows Formsпанели элементов:
Два элемента управления Label;
Два элемента управления TextBox;
Три элемента управления Button;
Один элемент управления CheckBox;
Одно представление DataGridView.
Задайте следующие свойства элементов управления:
Элемент управления
Свойство
Новое значение
Label1
Имя
Label2
Сообщение
TextBox1
txtName
(пусто)
TextBox2
txtMessage
(пусто)
true
Button1
sendMessage
Отправить сообщение
Button2
refreshMessages
Обновить список сообщений
Button3
purgeMessages
Очистить список сообщений
CheckBox1
highPriority
Высокоприоритетное сообщение
DataGridView1
messageGrid
Упорядочьте элементы управления.
Отправка сообщения в очередь
Дважды щелкните в конструкторе кнопку sendMessage, чтобы открыть в редакторе кода обработчик события Click.
Добавьте в метод код, создающий и отправляющий в очередь новый экземпляр Message, а также обновляющий список сообщений. Код метода 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(); }
Добавьте в проект ссылку на пространство имен System.Data. Для ссылки на System.Data используется оператор Оператор Imports (пространство имен .NET и тип) (язык Visual Basic) или using (справочник по C#). Дополнительные сведения см. в разделах Управление ссылками и Практическое руководство. Добавление или удаление ссылок в Visual Studio (Visual Basic).
Добавьте метод отображения содержимого очереди в представлении DataGridView. В этом методе для получения всех сообщений из очереди используется метод MessageQueue.GetAllMessages. Выбранные свойства очереди добавляются в объект DataTable, который используется в качестве источника данных для представления DataGridView. Для получения текста сообщения необходимо создать модуль форматирования.
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;
}
Отображение содержимого очереди
Дважды щелкните в конструкторе кнопку refreshMessage, чтобы открыть в редакторе кода обработчик события Click.
В обработчике событий Click вызовите метод 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();
}
Очистка содержимого очереди
Дважды щелкните в конструкторе кнопку purgeMessage, чтобы открыть в редакторе кода обработчик события Click.
Вызовите метод Purge объекта helpRequestQueue и обновите содержимое представления 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();
}
Тестирование приложения
Нажмите клавишу F5 для запуска приложения.
Введите имя и короткое сообщение.
Нажмите кнопку Отправить сообщение, чтобы поставить сообщение в очередь и обновить список сообщений.
Для удаления всех сообщений из очереди нажмите кнопку Очистить список сообщений. Список сообщений будет очищен.
См. также
Задачи
Практическое руководство. Создание очередей
Практическое руководство. Создание экземпляров компонента MessageQueue
Практическое руководство. Отправка простых сообщений
Практическое руководство. Извлечение сообщений
Основные понятия
Знакомство с системой обмена сообщениями