你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

QueueClientOptions.MessageDecodingFailed 事件

定义

可选。 执行从队列接收消息或达到峰值但无法解码时所需的任务。

当需要某些QueueMessageEncoding消息,但另一个生成者未按预期方式对消息进行编码时QueueClient,可以接收此类消息或达到峰值。 即队列包含具有不同编码的消息。

QueueMessageDecodingFailedEventArgsQueueClient包含已接收消息以及 ReceivedMessage 原始正文的 或 PeekedMessage ,即不会尝试解码,以便可以检查已从队列接收的正文。

QueueClient不会尝试从队列中删除消息。 因此,此类处理应包含在事件处理程序本身中。

处理程序可能由同步和异步接收和速览 API 调用。 因此,处理程序的实现应与正在使用的 API 保持一 QueueClient 致。 请参阅 SyncAsyncEventHandler<T> 如何正确实现处理程序。 下面的示例演示了一个处理程序,其中包含所有可能的情况。

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) 

事件类型

适用于