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()
下表显示了此属性是否在各种工作组模式下可用。
工作组模式 | 可用 |
---|---|
本地计算机 | 是 |
本地计算机和直接格式名称 | 是 |
远程计算机 | 否 |
远程计算机和直接格式名称 | 否 |
产品 | 版本 |
---|---|
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |