我有一个函数应用程序,定义如下:
[StorageAccount("DefaultEndpointsProtocol=...;AccountName=…;AccountKey=...")]
public static class Function1
{
[FunctionName("Function1")]
[return: Queue("lets-test-this-out")]
public static async Task<string> Run([QueueTrigger("lets-test-this-in")] Guid guid, TraceWriter log)
{
await Task.Delay(1000);
log.Info($"C# Queue trigger function processed: {guid}");
return Guid.NewGuid().ToString();
}
}
其中lets-test-this-in
和lets-test-this-out
是现有存储队列的名称,其连接字符串如下所示:"DefaultEndpointsProtocol=...;AccountName=…;AccountKey=..."
(从门户中的访问密钥-连接字符串处复制)。我的生成的function.json在发布时如下:
{
"generatedBy": "Microsoft.NET.Sdk.Functions.Generator-1.0.6",
"configurationSource": "attributes",
"bindings": [
{
"type": "queueTrigger",
"queueName": "lets-test-this-in",
"connection": "DefaultEndpointsProtocol=...;AccountName=...;AccountKey=...;",
"name": "guid"
}
],
"disabled": false,
"scriptFile": "../bin/FunctionAppTest.dll",
"entryPoint": "FunctionAppTest.Function1.Run"
}
关于这件事唯一可疑的是,我没有看到[return: Queue("lets-test-this")]
被转换成任何值。
无论如何,这个不起作用:
- 当我在门户中尝试测试函数时,我会看到
Status: 202 Accepted
,但输出窗格中没有任何日志记录。 - 当我将消息丢到
lets-test-this-in
中时,它不会被捕获。 - 流式日志将显示
[Info] Executing HTTP request
,然后什么都没有发生。
有趣的是,如果我删除[StorageAccount]
属性后重新发布,则可以在门户中进行测试,并在流式日志中看到它仍在执行。
也许相关的是我的local.settings.json
如下:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true"
}
}
- 可以是您选择的应用程序设置或连接字符串名称
。 - See Sharp