Partilhar via


QueueClientOptions.MessageDecodingFailed Evento

Definição

Opcional. Executa as tarefas necessárias quando uma mensagem é recebida ou atingiu o pico da fila, mas não pode ser decodificada.

Essa mensagem pode ser recebida ou atingiu o pico quando QueueClient está esperando certa QueueMessageEncoding , mas há outro produtor que não está codificando mensagens da maneira esperada. Ou seja, a fila contém mensagens com codificação diferente.

QueueMessageDecodingFailedEventArgs contém QueueClient que recebeu a mensagem, bem como ReceivedMessage ou PeekedMessage com corpo bruto, ou seja, nenhuma decodificação será tentada para que o corpo possa ser inspecionado como foi recebido da fila.

O QueueClient não tentará remover a mensagem da fila. Portanto, esse tratamento deve ser incluído no próprio manipulador de eventos.

O manipulador é potencialmente invocado por APIs de recebimento e espiar síncronas e assíncronas. Portanto, a implementação do manipulador deve se alinhar às QueueClient APIs que estão sendo usadas. Confira SyncAsyncEventHandler<T> como implementar o manipulador corretamente. O exemplo a seguir mostra um manipulador com todos os casos possíveis 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

Aplica-se a