MessageQueue.Transactional 属性

定义

获取一个值,该值指示队列是否只接受事务。

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);

注解

事务性消息传送是指将多个相关消息耦合到单个事务中。 将消息作为事务的一部分发送可确保消息按顺序传递,仅传递一次,并从其目标队列成功检索。

如果队列是事务性的,则它仅接受作为事务一部分发送的消息。 但是,可以在不显式使用事务 、 CommitAbort 语法的情况下从本地事务队列发送或接收非事务性Begin消息。 如果将非事务性消息发送到事务队列,则此组件将为其创建单消息事务,但使用直接格式名称引用远程计算机上的队列的情况除外。 在这种情况下,如果在发送消息时未指定事务上下文,则不会为你创建一个事务上下文,并且会将消息发送到死信队列。

如果将非事务性消息发送到事务队列,则无法在发生异常时回滚该消息。

MessageQueueTransaction 是线程单元感知,因此,如果单元状态为 STA,则不能在多个线程中使用事务。 Visual Basic 将main线程的状态设置为 STA,因此必须在子例程中Main应用 MTAThreadAttribute 。 否则,利用另一个线程发送事务性消息将引发 MessageQueueException 异常。 使用以下片段应用 MTAThreadAttribute

<System.MTAThreadAttribute>
 public sub Main()

下表显示了此属性是否在各种工作组模式下可用。

工作组模式 可用
本地计算机
本地计算机和直接格式名称
远程计算机
远程计算机和直接格式名称

适用于

另请参阅