AcknowledgeTypes Enumeration

 

Specifies the types of acknowledgment message that Message Queuing returns to the sending application.

This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.

Namespace:   System.Messaging
Assembly:  System.Messaging (in System.Messaging.dll)

<FlagsAttribute>
Public Enumeration AcknowledgeTypes

Member nameDescription
FullReachQueue

A mask used to request positive acknowledgment if the original message reaches the queue or negative acknowledgment if the time-to-reach-queue timer expires or if the original message cannot be authenticated.

FullReceive

A mask used to request positive acknowledgment if the original message is received from the queue before its time-to-be-received timer expires or negative acknowledgment otherwise.

NegativeReceive

A mask used to request a negative acknowledgment when the original message fails to be received from the queue.

None

A mask used to request that no acknowledgment messages (positive or negative) be posted.

NotAcknowledgeReachQueue

A mask used to request a negative acknowledgment when the original message cannot reach the queue. This can happen when the time-to-reach-queue timer expires or if a message cannot be authenticated.

NotAcknowledgeReceive

A mask used to request a negative acknowledgment when an error occurs that prevents the original message from being received from the queue before its time-to-be-received timer expires.

PositiveArrival

A mask used to request a positive acknowledgment when the original message reaches the queue.

PositiveReceive

A mask used to request a positive acknowledgment when the original message is successfully retrieved from the queue.

The AcknowledgeTypes class provides a set of flags that you can combine to request one or more categories of acknowledgment messages.

When an application sends a message, it can request that Message Queuing return acknowledgment messages indicating the success or failure of the original message. Message Queuing sends these acknowledgment messages to the administration queue you specify. Acknowledgment types can be divided broadly into four groups: positive arrival acknowledgments, positive read acknowledgments, negative arrival acknowledgments, and negative read acknowledgments. Requesting acknowledgments enables your application to receive notification of certain occurrences—for example, a message reaching its destination queue, a message being retrieved, or a time-out preventing a message from reaching or being retrieved from the destination queue.

When you are using the Message class to send messages to a queue, you specify the types of acknowledgments your application should receive in the AcknowledgeType property, as well as the administration queue that receives the acknowledgment messages in the AdministrationQueue property.

When you use the Message class to read acknowledgment messages in the administration queue, the instance's Acknowledgment property indicates the condition responsible for the acknowledgment message, for example, if a time-out expired before the original message was read from the queue.

The following code example sends and receives a message that contains an order to and from a queue. It specifically requests a positive acknowledgment when the original message reaches or is retrieved from the queue.

Imports System
Imports System.Messaging


' Provides a container class for the example.

Public Class MyNewQueue



   ' Provides an entry point into the application.       
   ' This example sends and receives a message from
   ' a queue.

   Public Shared Sub Main()
         ' Create a new instance of the class.
         Dim myNewQueue As New MyNewQueue()

         ' Create new queues.
         CreateQueue(".\myQueue")
         CreateQueue(".\myAdministrationQueue")

         ' Send messages to a queue.
         myNewQueue.SendMessage()

         ' Receive messages from a queue.
         Dim messageId As String = myNewQueue.ReceiveMessage()

         ' Receive acknowledgment message.
         If Not (messageId Is Nothing) Then
            myNewQueue.ReceiveAcknowledgment(messageId, ".\myAdministrationQueue")
         End If

         Return
   End Sub 'Main


      ' Creates a new queue.

   Public Shared Sub CreateQueue(queuePath As String)
         Try
            If Not MessageQueue.Exists(queuePath) Then
               MessageQueue.Create(queuePath)
            Else
               Console.WriteLine((queuePath + " already exists."))
            End If
         Catch e As MessageQueueException
            Console.WriteLine(e.Message)
         End Try
   End Sub 'CreateQueue




      ' Sends a string message to a queue.

   Public Sub SendMessage()

         ' Connect to a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")

         ' Create a new message.
         Dim myMessage As New Message("Original Message")

         myMessage.AdministrationQueue = New MessageQueue(".\myAdministrationQueue")
         myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive Or AcknowledgeTypes.PositiveArrival

         ' Send the Order to the queue.
         myQueue.Send(myMessage)

         Return
   End Sub 'SendMessage




      ' Receives a message containing an Order.

   Public Function ReceiveMessage() As String
         ' Connect to the a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")

         myQueue.MessageReadPropertyFilter.CorrelationId = True


         ' Set the formatter to indicate body contains an Order.
         myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(String)})

         Dim returnString As String = Nothing

         Try
            ' Receive and format the message. 
            Dim myMessage As Message = myQueue.Receive()


            ' Display message information.
            Console.WriteLine("____________________________________________")
            Console.WriteLine("Original message information--")
            Console.WriteLine(("Body: " + myMessage.Body.ToString()))
            Console.WriteLine(("Id: " + myMessage.Id.ToString()))
            Console.WriteLine("____________________________________________")

            returnString = myMessage.Id



         ' Handle invalid serialization format.
         Catch e As InvalidOperationException
            Console.WriteLine(e.Message)
         End Try

         ' Catch other exceptions as necessary.
         Return returnString
   End Function 'ReceiveMessage



      ' Receives a message containing an Order.

   Public Sub ReceiveAcknowledgment(messageId As String, queuePath As String)
         Dim found As Boolean = False
         Dim queue As New MessageQueue(queuePath)
         queue.MessageReadPropertyFilter.CorrelationId = True
         queue.MessageReadPropertyFilter.Acknowledgment = True

         Try
            While Not (queue.PeekByCorrelationId(messageId) Is Nothing)
               Dim myAcknowledgmentMessage As Message = queue.ReceiveByCorrelationId(messageId)

               ' Output acknowledgment message information. The correlation Id is identical
               ' to the id of the original message.
               Console.WriteLine("Acknowledgment Message Information--")
               Console.WriteLine(("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString()))
               Console.WriteLine(("Id: " + myAcknowledgmentMessage.Id.ToString()))
               Console.WriteLine(("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString()))
               Console.WriteLine("____________________________________________")

               found = True
            End While
         Catch e As InvalidOperationException
            ' This exception would be thrown if there is no (further) acknowledgment message
            ' with the specified correlation Id. Only output a message if there are no messages;
            ' not if the loop has found at least one.
            If found = False Then
               Console.WriteLine(e.Message)
            End If
         End Try 
   End Sub 'ReceiveAcknowledgment ' Handle other causes of invalid operation exception.
 End Class 'MyNewQueue

.NET Framework
Available since 1.1
Return to top
Show: