次の方法で共有


QueueClientOptions.MessageDecodingFailed イベント

定義

省略可能。 キューからメッセージを受信またはピークしたときに必要なタスクを実行しますが、デコードできません。

このようなメッセージは、特定QueueMessageEncodingのメッセージを想定しているが、予期した方法でメッセージをエンコードしていない別のプロデューサーがある場合QueueClientに、受信またはピークに設定できます。 つまり、キューにはエンコードが異なるメッセージが含まれています。

QueueMessageDecodingFailedEventArgsQueueClientには、メッセージReceivedMessageを受信した、またはPeekedMessage未加工の本文が含まれています。つまり、キューから受信した本文を検査できるようにデコードは試行されません。

では QueueClient 、キューからメッセージを削除しようとはしません。 そのため、このような処理はイベント ハンドラー自体に含める必要があります。

ハンドラーは、同期と非同期の両方の受信 API とピーク 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) 

イベントの種類

適用対象