Azure Functions Blob触发器动态绑定

时间:2019-06-24 17:54:52

标签: c# azure azure-blob-storage appsettings azure-function-app

我需要一个Azure Functions blob触发器来触发由应用程序设置在运行时提供的存储桶。我读到可以做到这一点:

[FunctionName("Process")]
public static async Task Process([BlobTrigger("%BucketName%/{name}", Connection = "AzureWebJobsStorage")] Stream avroBlobStream, string name, TraceWriter log)
{
}

如果我仅在appsettings.json的BucketName字段中有Values,这将在本地工作。

{
  "IsEncrypted": false,
  "Values": {
    "BucketName": "capture-bucket",
  }
}

如果不在“值”字段中,则为错误:

[6/24/2019 5:52:15 PM] Function 'SomeClass.Process' failed indexing and will be disabled.
[6/24/2019 5:52:15 PM] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. config.UseServiceBus(), config.UseTimers(), etc.).

我将仅BucketName的设置放入Azure App函数中,但这给了我同样的错误。当在实际的Azure环境中时,您能否建议应该调用该设置或我做错了什么?应该是Values:BucketName吗?但是我从未在Microsoft网站上看​​到带有Values:作为前缀的示例。

1 个答案:

答案 0 :(得分:2)

对于您的错误,我测试了一种情况是未安装Microsoft.Azure.WebJobs.Extensions.Storage软件包。安装后,它将正常工作。您可以尝试一下。

关于动态绑定,官方教程中有描述:Binding expressions - app settings。而且,当您在本地测试时,应用设置值来自local.settings.json文件。我不知道您为什么使用appsettings.json。格式就是您粘贴的格式。

在Azure上,由于local.settings.json中的设置不会随VS一起部署,因此您必须转到“ Azure函数配置”,然后设置绑定名称。

enter image description here

enter image description here

我已经过测试,这样可以正常工作,可以处理我的Blob文件。

enter image description here

希望这对您有帮助,如果我误解了您的要求,请告诉我。