Virtualization At Least Once

Ensures that the Messaging Bus attempts to deliver each message to its destination at least once.

Delivery succeeds when the provider acknowledges receipt. Otherwise, if a delivery attempt fails, the Messaging Bus attempts to redeliver according to the parameters of this policy set. If the parameters preclude redelivery, the entire message fails, and other parameters determine message disposal.

The Messaging Bus preserves messages in its persistent store until success or disposal. The Messaging Bus does not deliver a message within a transaction (however, the provider may independently process and acknowledge the message with a transaction).

This policy set can apply at a Virtualization binding on a service or reference, or at a SOAP binding on a promoted service or reference.

Parameter Description
Max redelivery count The Messaging Bus continues to attempt delivery until either delivery succeeds, or the number of delivery attempts reaches this value. For example, with a value of 1, the Messaging Bus attempts only the initial delivery, then stops.

Zero is a special value, indicating no upper limit on redelivery.

Default: 0

Redelivery delay interval (s) After each failed delivery attempt, the Messaging Bus waits for this interval before its next attempt.
Note: The redelivery time is not implemented exactly. The difference between the specified delay and the actual delay can be up to an additional 15 s.

Default: 15.

Exceptions upon which to stop redelivery If the provider throws any exception in this list, then the Messaging Bus cancels further delivery attempts (even if the maximum is not yet reached).

Default: None.

Enable error queue This parameter determines the disposal of a message when delivery fails—that is, the Messaging Bus exceeds the maximum delivery count or the provider throws an error that stops delivery.

When enabled, place the message on the error queue (see below).

When disabled, discard the message.

Default: Disabled.

Error queue name The Messaging Bus places failed messages on this queue (if the error queue is enabled).

Default: Create the default error queue by appending _ErrorQueue to the service queue name.

Transactional When the error queue is enabled, the Messaging Bus does two operations after each failed message:
  1. Place the failed message on the error queue.
  2. Remove the failed message from the provider queue.

When this parameter is disabled, the error queue can contain duplicate copies of the failed message. For example, if a hardware failure interrupts between the two operations, then after restart the message could place a second copy on the error queue.

When this parameter is enabled, the Messaging Bus prevents duplicates on the error queue by wrapping the two operations in a transaction. If a hardware failure interrupts between the two operations, the transaction rolls back after restart.

Transactions dramatically decrease message delivery performance. Unless it is very important to prevent duplicate failed messages on the error queue, we recommend disabling this parameter.

Default: Disabled.