MessageQueue.Transactional 属性

定义

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

[System.Messaging.MessagingDescription("MQ_Transactional")]
public bool Transactional { get; }

属性值

如果队列只接受作为事务的一部分发送的消息,则为 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()

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

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

适用于

产品 版本
.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

另请参阅