Ler en inglés

Compartir por


AcknowledgeTypes Enumeración

Definición

Especifica los tipos de mensajes de confirmación que Message Queuing devuelve a la aplicación de envío.

Esta enumeración admite una combinación bit a bit de sus valores de miembro.

C#
[System.Flags]
public enum AcknowledgeTypes
Herencia
AcknowledgeTypes
Atributos

Campos

Nombre Valor Description
FullReachQueue 5

Máscara que se utiliza para solicitar una confirmación positiva si el mensaje original llega a la cola, o una confirmación negativa si el tiempo para llegar a la cola expira o el mensaje original no se puede autenticar.

FullReceive 14

Máscara que se utiliza para solicitar una confirmación positiva si el mensaje original se recibe de la cola antes de que el tiempo de recepción expire, o una confirmación negativa en caso contrario.

NegativeReceive 8

Máscara que se utiliza para solicitar una confirmación negativa cuando el mensaje original no se recibe de la cola.

El uso del MessageQueue.Peek método no quita un mensaje de la cola, por lo que este tipo de confirmación se puede devolver incluso si ha inspeccionado el mensaje. Solo el MessageQueue.Receive método (o el método asincrónico MessageQueue.BeginReceive relacionado) quita un mensaje de la cola.

None 0

Máscara utilizada para solicitar que no se envíe ningún mensaje de confirmación (ya sea positivo o negativo).

NotAcknowledgeReachQueue 4

Máscara que se utiliza para solicitar una confirmación negativa cuando el mensaje original no puede llegar a la cola. Esto sucede cuando expira el tiempo para llegar a la cola o si no se puede autenticar un mensaje.

NotAcknowledgeReceive 12

Máscara que se utiliza para solicitar una confirmación negativa cuando se produce un error que impide que el mensaje original se reciba desde la cola antes de que expire el tiempo de recepción.

PositiveArrival 1

Máscara que se utiliza para solicitar una confirmación positiva cuando el mensaje original llega a la cola.

PositiveReceive 2

Máscara que se utiliza para solicitar una confirmación positiva cuando el mensaje original se recupera correctamente de la cola.

Ejemplos

En el ejemplo de código siguiente se envía y recibe un mensaje que contiene un orden hacia y desde una cola. Solicita específicamente una confirmación positiva cuando el mensaje original alcanza o se recupera de la cola.

C#
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

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

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Create new queues.
            CreateQueue(".\\myQueue");
            CreateQueue(".\\myAdministrationQueue");

            // Send messages to a queue.
            myNewQueue.SendMessage();

            // Receive messages from a queue.
            string messageId = myNewQueue.ReceiveMessage();

            // Receive acknowledgment message.
            if(messageId != null)
            {
                myNewQueue.ReceiveAcknowledgment(messageId, ".\\myAdministrationQueue");
            }

            return;
        }

        //**************************************************
        // Creates a new queue.
        //**************************************************

        public static void CreateQueue(string queuePath)
        {
            try	
            {
                if(!MessageQueue.Exists(queuePath))
                {
                    MessageQueue.Create(queuePath);
                }
                else
                {
                    Console.WriteLine(queuePath + " already exists.");
                }
            }
            catch (MessageQueueException e)
            {
                Console.WriteLine(e.Message);
            }
        }

        //**************************************************
        // Sends a string message to a queue.
        //**************************************************
        
        public void SendMessage()
        {

            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Create a new message.
            Message myMessage = new Message("Original Message");

            myMessage.AdministrationQueue = new MessageQueue(".\\myAdministrationQueue");
            myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive | AcknowledgeTypes.PositiveArrival;

            // Send the Order to the queue.
            myQueue.Send(myMessage);

            return;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public  string ReceiveMessage()
        {
            // Connect to the a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            myQueue.MessageReadPropertyFilter.CorrelationId = true;

            // Set the formatter to indicate body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(string)});

            string returnString = null;
            
            try
            {
                // Receive and format the message.
                Message myMessage =	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;
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

            // Handle invalid serialization format.
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e.Message);
            }
            
            // Catch other exceptions as necessary.

            return returnString;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public void ReceiveAcknowledgment(string messageId, string queuePath)
        {
            bool found = false;
            MessageQueue queue = new MessageQueue(queuePath);
            queue.MessageReadPropertyFilter.CorrelationId = true;
            queue.MessageReadPropertyFilter.Acknowledgment = true;

            try
            {
                while(queue.PeekByCorrelationId(messageId) != null)
                {
                    Message myAcknowledgmentMessage = 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;
                }
            }
            catch (InvalidOperationException e)
            {
                // 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)
                {	
                    Console.WriteLine(e.Message);
                }

                // Handle other causes of invalid operation exception.
            }
        }
    }
}

Comentarios

La AcknowledgeTypes clase proporciona un conjunto de marcas que puede combinar para solicitar una o varias categorías de mensajes de confirmación.

Cuando una aplicación envía un mensaje, puede solicitar que Message Queuing devuelva mensajes de confirmación que indican el éxito o error del mensaje original. Message Queuing envía estos mensajes de confirmación a la cola de administración que especifique. Los tipos de confirmación se pueden dividir ampliamente en cuatro grupos: confirmaciones de llegada positivas, confirmaciones de lectura positivas, confirmaciones de llegada negativas y confirmaciones de lectura negativas. La solicitud de confirmaciones permite a la aplicación recibir notificaciones de ciertas repeticiones; por ejemplo, un mensaje que llega a su cola de destino, un mensaje que se recupera o un tiempo de espera impide que un mensaje llegue o se recupere de la cola de destino.

Cuando se usa la Message clase para enviar mensajes a una cola, se especifican los tipos de confirmaciones que la aplicación debe recibir en la AcknowledgeType propiedad , así como la cola de administración que recibe los mensajes de confirmación en la AdministrationQueue propiedad .

Cuando se usa la Message clase para leer mensajes de confirmación en la cola de administración, la propiedad de Acknowledgment la instancia indica la condición responsable del mensaje de confirmación, por ejemplo, si ha expirado un tiempo de espera antes de que se lea el mensaje original de la cola.

Se aplica a

Produto Versións
.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

Consulte también