如何:在内部事务中发送消息

更新:2007 年 11 月

内部事务仅涉及“消息队列”资源并且完全通过 MessageQueueTransaction 从“消息队列”进行管理。实例化 MessageQueueTransaction 的一个实例来处理事务进程,并将其传递到您选择作为事务发送的消息中。

以下方法控制事务性进程:

方法

用于

Begin

指示包含一个或多个消息和操作的事务的开始。

Commit

在事务所包含的所有消息操作都已成功执行时提交该事务。

Abort

在错误检查过程中回滚事务。

说明:

不将断开的队列或已满的队列视为失败。

大多数情况下,事务处理代码都应当放在 Try...Catch...Finally 语句 (Visual Basic)(或 try-catch-finally(C# 参考))内。这样,您就可以在语句的 Try 部分指定事务,然后使用 Catch 语句在出错时发出 Abort 方法。有关此模式的示例,请参见以下代码。

在内部事务中发送消息

  1. 创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见 如何:创建 MessageQueue 组件实例

  2. 创建 MessageQueueTransaction 类的一个实例以控制事务。

  3. 调用 MessageQueueTransaction 类的 Begin 方法。

  4. 定义要在调用 Begin 后发送的每一消息。有关更多信息,请参见 如何:创建 MessageQueue 组件实例

  5. 在最后一个消息发送之后,调用 MessageQueueTransaction 实例的 Commit 以关闭事务。

  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 组件实例

概念

事务性消息处理

其他资源

发送和序列化消息