ExceptionReceived
コールバックからメッセージを取得する方法を見てみましたが、情報が引数に存在しません。ここに私のサンプルコードです:あなたが機能でこのラッパーを置くか、または作成することができた後
client.OnMessage(brokeredMessage =>
{
try
{
// Process the message
...
// Complete the message (depends on the)
brokeredMessage.Complete();
}
catch (Exception ex)
{
Trace.TraceError("Exception captured: " + ex.Message);
// Here you have access to the brokeredMessage so you can log what you want.
...
//Abandon the message so that it could be re-process ??
brokeredMessage.Abandon();
}
}, options);
:あなたの必要性に応じて、
var connectionString = "my-connection-string";
var queueName = "my-queue-name";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
var options = new OnMessageOptions();
options.ExceptionReceived += (sender, args) =>
{
// Neither sender or args contains information about the message being processed
};
client.OnMessage(brokeredMessage =>
{
throw new Exception();
}, options);
、簡単な解決策はのtry/catchの内側にあなたのコールバックをラップすることですQueueClient
用の拡張方法:
public static class QueueClientExtensions
{
public static void OnCustomMessage(this QueueClient queueClient, Action<BrokeredMessage> callback,
OnMessageOptions onMessageOptions)
{
queueClient.OnMessage(message =>
{
try
{
// process the message
callback(message);
//complete if success
message.Complete();
}
catch (Exception ex)
{
// Here you have access to the brokeredMessage so you can log what you want.
// message.GetBody<string>()
Trace.TraceError("Exception captured: " + ex.Message);
//Abandon the message so that it could be re-process
message.Abandon();
}
}, onMessageOptions);
}
}
と同じように、このメソッドを呼び出します。
var queueClient = QueueClient.CreateFromConnectionString(connectionString, queueName);
queueClient.OnCustomMessage(brokeredMessage =>
{
// Process the message
...
}, new OnMessageOptions());
例外をスローしてメソッドに到達したかどうか確認できますか? – Thomas
コールバックコードで例外をスローすると、LogErrorsが実行されますが、私の問題は、コールバックで処理されているメッセージをLogErrorsパレメータまたは他の方法で取得する方法です。 –
あなたは送信者パラメータ?パラメータの1つの中に何かを見つけることができるはずです – Thomas