QueueClientOptions.MessageDecodingFailed Evento

Definición

Opcional. Realiza las tareas necesarias cuando se recibe o alcanza un mensaje de la cola, pero no se puede descodificar.

Este mensaje se puede recibir o alcanzar el pico cuando QueueClient se espera cierto, QueueMessageEncoding pero hay otro productor que no codifica los mensajes de la manera esperada. Es decir, la cola contiene mensajes con codificación diferente.

QueueMessageDecodingFailedEventArgs contiene QueueClient que ha recibido el mensaje, así como ReceivedMessage o PeekedMessage con cuerpo sin procesar, es decir, no se intentará descodificar para que el cuerpo se pueda inspeccionar tal cual se ha recibido de la cola.

QueueClient no intentará quitar el mensaje de la cola. Por lo tanto, este control debe incluirse en el propio controlador de eventos.

El controlador se invoca potencialmente mediante la recepción sincrónica y asincrónica y las API de inspección. Por lo tanto, la implementación del controlador debe alinearse con QueueClient las API que se usan. Vea SyncAsyncEventHandler<T> cómo implementar correctamente el controlador. En el ejemplo siguiente se muestra un controlador con todos los casos posibles explorados.

QueueClientOptions queueClientOptions = new QueueClientOptions()
{
    MessageEncoding = QueueMessageEncoding.Base64
};

queueClientOptions.MessageDecodingFailed += async (QueueMessageDecodingFailedEventArgs args) =>
{
    if (args.PeekedMessage != null)
    {
        Console.WriteLine($"Invalid message has been peeked, message id={args.PeekedMessage.MessageId} body={args.PeekedMessage.Body}");
    }
    else if (args.ReceivedMessage != null)
    {
        Console.WriteLine($"Invalid message has been received, message id={args.ReceivedMessage.MessageId} body={args.ReceivedMessage.Body}");

        if (args.IsRunningSynchronously)
        {
            args.Queue.DeleteMessage(args.ReceivedMessage.MessageId, args.ReceivedMessage.PopReceipt);
        }
        else
        {
            await args.Queue.DeleteMessageAsync(args.ReceivedMessage.MessageId, args.ReceivedMessage.PopReceipt);
        }
    }
};

QueueClient queueClient = new QueueClient(connectionString, queueName, queueClientOptions);
public event Azure.Core.SyncAsyncEventHandler<Azure.Storage.Queues.QueueMessageDecodingFailedEventArgs> MessageDecodingFailed;
member this.MessageDecodingFailed : Azure.Core.SyncAsyncEventHandler<Azure.Storage.Queues.QueueMessageDecodingFailedEventArgs> 
Public Event MessageDecodingFailed As SyncAsyncEventHandler(Of QueueMessageDecodingFailedEventArgs) 

Tipo de evento

Se aplica a