MessageQueue.Transactional 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个值,该值指示队列是否只接受事务。
public:
property bool Transactional { bool get(); };
[System.Messaging.MessagingDescription("MQ_Transactional")]
public bool Transactional { get; }
[<System.Messaging.MessagingDescription("MQ_Transactional")>]
member this.Transactional : bool
Public ReadOnly Property Transactional As Boolean
属性值
如果队列只接受作为事务的一部分发送的消息,则为 true
;否则为 false
。
- 属性
例外
访问“消息队列”方法时出错。
示例
下面的代码示例显示消息队列的 Transactional 属性的值。
// Display the value of the queue's Transactional property.
Console.WriteLine("MessageQueue.Transactional: {0}",
queue.Transactional);
注解
事务性消息传送是指将多个相关消息耦合到单个事务中。 将消息作为事务的一部分发送可确保消息按顺序传递,仅传递一次,并从其目标队列成功检索。
如果队列是事务性的,则它仅接受作为事务一部分发送的消息。 但是,可以在不显式使用事务 、 Commit和 Abort 语法的情况下从本地事务队列发送或接收非事务性Begin消息。 如果将非事务性消息发送到事务队列,则此组件将为其创建单消息事务,但使用直接格式名称引用远程计算机上的队列的情况除外。 在这种情况下,如果在发送消息时未指定事务上下文,则不会为你创建一个事务上下文,并且会将消息发送到死信队列。
如果将非事务性消息发送到事务队列,则无法在发生异常时回滚该消息。
MessageQueueTransaction 是线程单元感知,因此,如果单元状态为 STA
,则不能在多个线程中使用事务。 Visual Basic 将main线程的状态设置为 STA
,因此必须在子例程中Main
应用 MTAThreadAttribute 。 否则,利用另一个线程发送事务性消息将引发 MessageQueueException 异常。 使用以下片段应用 MTAThreadAttribute 。
<System.MTAThreadAttribute>
public sub Main()
下表显示了此属性是否在各种工作组模式下可用。
工作组模式 | 可用 |
---|---|
本地计算机 | 是 |
本地计算机和直接格式名称 | 是 |
远程计算机 | 否 |
远程计算机和直接格式名称 | 否 |