如何:在内部事务中发送消息
更新:2007 年 11 月
内部事务仅涉及“消息队列”资源并且完全通过 MessageQueueTransaction 从“消息队列”进行管理。实例化 MessageQueueTransaction 的一个实例来处理事务进程,并将其传递到您选择作为事务发送的消息中。
以下方法控制事务性进程:
方法 |
用于 |
---|---|
指示包含一个或多个消息和操作的事务的开始。 |
|
在事务所包含的所有消息操作都已成功执行时提交该事务。 |
|
在错误检查过程中回滚事务。 |
说明: |
---|
不将断开的队列或已满的队列视为失败。 |
大多数情况下,事务处理代码都应当放在 Try...Catch...Finally 语句 (Visual Basic)(或 try-catch-finally(C# 参考))内。这样,您就可以在语句的 Try 部分指定事务,然后使用 Catch 语句在出错时发出 Abort 方法。有关此模式的示例,请参见以下代码。
在内部事务中发送消息
创建 MessageQueue 组件的一个实例,并将其 Path 属性设置为要引用的队列。有关更多信息,请参见 如何:创建 MessageQueue 组件实例。
创建 MessageQueueTransaction 类的一个实例以控制事务。
调用 MessageQueueTransaction 类的 Begin 方法。
定义要在调用 Begin 后发送的每一消息。有关更多信息,请参见 如何:创建 MessageQueue 组件实例。
在最后一个消息发送之后,调用 MessageQueueTransaction 实例的 Commit 以关闭事务。
将整个事务包含在 Try...Catch 错误检查代码之中,以处理引发的任何错误。
如果检测到错误,请通过调用 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(); }