Freigeben über


QueueClientOptions.MessageDecodingFailed Ereignis

Definition

Optional. Führt die aufgaben aus, die erforderlich sind, wenn eine Nachricht von der Warteschlange empfangen oder ein Spitzenwert erreicht wird, aber nicht decodiert werden kann.

Eine solche Nachricht kann empfangen oder erreicht werden, wenn QueueClient eine bestimmte QueueMessageEncoding Nachricht erwartet wird, aber es gibt einen anderen Producer, der Nachrichten nicht in erwarteter Weise codiert. Das heißt, die Warteschlange enthält Nachrichten mit unterschiedlicher Codierung.

QueueMessageDecodingFailedEventArgs enthält QueueClient , der die Nachricht ReceivedMessage sowie oder PeekedMessage mit unformatiertem Text empfangen hat, d. h., es wird keine Decodierung versucht, damit der Text überprüft werden kann, da er von der Warteschlange empfangen wurde.

Versucht QueueClient nicht, die Nachricht aus der Warteschlange zu entfernen. Daher sollte eine solche Behandlung in den Ereignishandler selbst eingeschlossen werden.

Der Handler wird möglicherweise sowohl von synchronen als auch von asynchronen Empfangs- und Einsehen-APIs aufgerufen. Daher sollte die Implementierung des Handlers an QueueClient den verwendeten APIs ausgerichtet sein. Hier erfahren Sie SyncAsyncEventHandler<T> , wie Sie den Handler richtig implementieren. Das folgende Beispiel zeigt einen Handler, in dem alle möglichen Fälle untersucht werden.

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) 

Ereignistyp

Gilt für: