我有这个Queue Trigger
。预期是当我在 中插入消息时Queue
,触发器必须触发并处理出队的消息。
[FunctionName("NewPayrollQueueTrigger")]
public async static void Run([QueueTrigger("myqueue", Connection =
"AzureWebJobsStorage")]string myQueueItem,
[DurableClient] IDurableOrchestrationClient starter,
ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
await starter.StartNewAsync("NewPayrollOrchestrator", input: myQueueItem);
}
触发器正在正常激活,但这种奇怪的行为正在发生。该函数显然期望message
被编码为Base-64
.
异常绑定参数 'myQueueItem' <--- 输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。
我正在使用Azure Queue
库 v.12中的此方法将消息发送到队列,但Azure.Storage.Queues
没有发现将消息编码为Base-64
. 请注意,这_queue
是一个QueueClient
实例。
public async Task<Response<SendReceipt>> SendAsync(string message)
{
return await _queue.SendMessageAsync(message);
}
所以我试图自己编码消息......
public async Task<Response<SendReceipt>> SendAsBase64Async(string message)
{
byte[] buffer = Encoding.Unicode.GetBytes(message);
string msg = Convert.ToBase64String(buffer);
return await _queue.SendMessageAsync(msg);
}
......它也不起作用。这是我的代码通过该部分但进一步抛出错误,表明它可以获取消息但未正确解码,因为它是存储中现有 blob 的文件名:
让这个工作的唯一方法是,如果我使用Azure Storage Explorer
选择通过 UI 对消息进行编码,手动将消息发送到队列。