Azure Function存储帐户连接字符串

时间:2018-07-11 21:13:16

标签: c# azure azure-storage azure-functions azure-storage-queues

我有一个像这样定义的功能应用程序

[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-inlets-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"
    }
}

1 个答案:

答案 0 :(得分:1)

StorageAccount属性接受放置连接字符串的应用程序设置的名称,而不是连接字符串本身的名称。例如

[StorageAccount("AzureWebJobsStorage")]

输出绑定未显示在生成的function.json中-令人困惑,但可以预期。