Поделиться через


Практическое руководство. Отправка сообщений во внутренних транзакциях

Обновлен: Ноябрь 2007

Внутренние транзакции используют только ресурсы очередей сообщений и полностью управляются из очередей сообщений с помощью класса MessageQueueTransaction. Для обработки транзакционного процесса необходимо создать экземпляр MessageQueueTransaction и передать его в сообщение, выбранное для отправки в качестве транзакции.

Транзакционным процессом можно управлять с помощью следующих методов.

Метод

Цель использования

Begin

Задает начало транзакции, состоящей из одного или нескольких сообщений и операций.

Commit

Завершает транзакцию, если все содержащиеся в сообщении операции были выполнены успешно.

Abort

Используется в процессе проверки ошибок для отката транзакции.

y93c2k87.alert_note(ru-ru,VS.90).gifПримечание.

Отключенная или полностью заполненная очередь не рассматривается как сбой.

В большинстве случаев транзакционный код должен включаться в Оператор Try... Catch... Finally (Visual Basic) (или try-catch-finally (Справочник по C#)). Это позволяет задать транзакцию в разделе Try инструкции, а затем использовать инструкцию Catch для вызова метода Abort в случае возникновения каких-либо ошибок. В качестве примера указанного подхода приводится следующий код.

Отправка сообщения в пределах внутренней транзакции

  1. Создайте экземпляр компонента MessageQueue и задайте в качестве значения свойства Path очередь, на которую необходимо сослаться. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.

  2. Для управления транзакцией создайте экземпляр класса MessageQueueTransaction.

  3. Вызовите метод Begin класса MessageQueueTransaction.

  4. После вызова Begin определите каждое из сообщений, которое необходимо отправить. Дополнительные сведения см. в разделе Практическое руководство. Создание экземпляров компонента MessageQueue.

  5. После отправки последнего сообщения для закрытия транзакции вызовите метод Commit экземпляра MessageQueueTransaction.

  6. Весь итог транзакции рекомендуется включить в код проверки ошибок Try...Catch для обработки любых появившихся ошибок.

  7. При обнаружении ошибки выполните откат транзакции, вызвав метод Abort.

    Код может выглядеть следующим образом.

    Dim transaction As New System.Messaging.MessageQueueTransaction
    transaction.Begin()
    Try
        MessageQueue1.Send("Message1", "Label1", transaction)
        MessageQueue1.Send("Message2", "Label2", transaction)
        MessageQueue1.Send("Message3", "Label3", transaction)
        transaction.Commit()
    Catch
        transaction.Abort()
    End Try
    
         System.Messaging.MessageQueueTransaction transaction =
                new System.Messaging.MessageQueueTransaction();
            transaction.Begin();
            try
            {
                messageQueue1.Send("Message1", "Label1", transaction);
                messageQueue1.Send("Message2", "Label2", transaction);
                messageQueue1.Send("Message3", "Label3", transaction);
                transaction.Commit();
            }
            catch
            {
                transaction.Abort();
            }
    

См. также

Задачи

Практическое руководство. Создание транзакционных очередей

Практическое руководство. Создание экземпляров компонента MessageQueue

Основные понятия

Транзакционная обработка сообщений

Другие ресурсы

Отправка и сериализация сообщений