Для удаления очередей используется статический метод Delete. Параметром метода является полное имя общедоступной или локальной очереди. В следующем примере удаляются локальная очередь с именем TestQ.
MessageQueue.Delete(".\\Private$\\TestQ");
Для посылки сообщения очереди применяется метод Send, который является перегруженным и включает параметры Body, Label и Transaction. Ниже приведен пример кода, где выполняются отправка сообщения.
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
if (MessageQueue.Exists(q.Path))
{
q.Send("Test message","msg1");
q.Close();
}
Для проверки того, что очередь существует, применяется метод Exists. Желательно всегда производить подобную проверку, чтобы при выполнении программы не генерировалось прерывание, вызванное тем, что очередь не создана или находится в другом месте.
Если просмотреть очереди в консоли управления компьютером, в очереди TestQ можно найти сообщение сметкой msg1. При двойном щелчке на сообщении или выборе команды «Свойства» в контекстном меню по правой кнопке мыши можно просмотреть свойства и текст сообщения.
Для чтения сообщения из очереди используется метод Peek или Receive. Метод Peek читает первое сообщение в очереди. Он используется для проверки наличия сообщений в очереди и проверки ее свойств. При этом сообщение не удаляется. Если вызвать метод несколько раз, он будет возвращать одно и то же сообщение, пока в очереди не появится сообщение более высокого приоритета. Метод Receive читает сообщение и удаляет его из очереди.
Применение метода Peek демонстрируется в следующем фрагменте кода.
// Подключение к очереди
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
// Установка форматера тела сообщения.
q.Formatter = new XmlMessageFormatter(new Type[]
{typeof(System.String)});
try
{
// Просмотр и форматирование сообщения.
System.Messaging.Message myMessage = q.Peek();
String str = (String)myMessage.Body;
// Вывод тела сообщения на экран.
MessageBox.Show(str);
}
catch (MessageQueueException)
{
// Обработка исключений, связанных с очередями.
}
// Обработка исключений, связанных с сериализацией.
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
Применение метода Receive демонстрируется в следующем фрагменте кода.
MessageQueue q = new MessageQueue(".\\Private$\\TestQ");
q.Formatter = new XmlMessageFormatter(new Type[] { typeof(System.String) });
try
{
System.Messaging.Message myMessage = q.Receive();
String str = (String)myMessage.Body;
MessageBox.Show(str);
}
catch (MessageQueueException)
{
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.Message);
}
Do'stlaringiz bilan baham: |