【问题标题】:Azure Functions - StorageBlob Trigger method signature using CloudBlockBlob not StreamAzure Functions - 使用 CloudBlockBlob 而非流的 StorageBlob 触发器方法签名
【发布时间】:2019-05-17 12:58:57
【问题描述】:

使用 Visual Studio 2017 创建面向 .Net Standard 2.0 的 Azure Functions。

使用添加新 Azure 函数向导,成功创建了具有以下方法签名的 blob 触发器方法。

public static void Run([BlobTrigger("attachments-collection/{name}")] Stream myBlob, string name, ILogger log)

此方法编译并工作正常。

但是,我们希望能够访问连接到保存到存储中的 CloudBlockBlob 的元数据,据我所知,使用流是不可能的。此站点上的其他答案(例如 (Azure Function Blob Trigger CloudBlockBlob binding) 建议您可以绑定到 CloudBlockBlob 而不是 Stream 并以这种方式访问​​元数据。但建议的解决方案无法在最新版本的 Azure Functions 中编译。

Microsoft 的在线文档 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob#trigger---usage) 似乎也确认可以将触发器绑定到 CloudBlockBlob 而不是 Stream,但没有给出语法示例。

有人可以澄清一下使 Azure Function Blob 存储触发器绑定到 CloudBlockBlob 而不是标准 Stream 所需的确切语法吗?

谢谢

【问题讨论】:

  • 您是否将 Blob 属性中的FileAccess.ReadWrite 设置为参数?根据您必须的文档。 docs.microsoft.com/en-us/azure/azure-functions/…
  • 万一出现编译错误。可以在这里留言吗?
  • 我要做的是捕获触发该功能的 CloudBlockBlob。为此,我相信我需要使用 BlobTrigger 属性而不是 Blob 属性。当我尝试在 BlobTrigger 属性中设置 FileAccess.ReadWrite 时,出现编译错误“'BlobTriggerAttribute 不包含采用两个参数的构造函数”。

标签: azure azure-functions azure-blob-storage


【解决方案1】:

感谢 Jerry Liu 的见解,这个问题已经解决了。

方法: 使用创建新函数应用时安装的 Azure 存储的默认存储包

Microsoft.Azure.WebJobs.Extensions.Storage (3.0.1)

这会安装依赖项

WindowsAzure.Storage (9.3.1)

那么下面两个方法签名都会正确运行

public static async Task Run([BlobTrigger("samples-workitems/{name}")]Stream myBlob, string name, ILogger log)

public static async Task Run([BlobTrigger("samples-workitems/{name}")]CloudBlockBlob myBlob, string name, ILogger log)

【讨论】:

  • 如何将 CloudBlockBlob 复制到 Stream 中?
【解决方案2】:

实际上CloudBlockBlob 确实有效,我们不需要FileAccess.ReadWrite,因为它是 BlobTrigger 而不是 Blob 输入或输出。

public static Task Run([BlobTrigger("samples-workitems/{name}")]CloudBlockBlob blob, string name, ILogger log)

无法将 BlobTrigger 绑定到 CloudBlockBlob 的更新

跟踪here 时出现问题,Function SDK 与WindowsAzure.Storge >=v9.3.2 集成时出现问题。因此,只需删除任何 WindowsAzure.Storage 包引用,Function SDK 在内部默认引用 v9.3.1。

【讨论】:

  • 杰瑞 - 谢谢。我已经尝试过了,一切正常。但是,当我发布到 Azure 时,将 Blob 添加到存储时永远不会触发该函数。 (如果 blob 是签名中的 Stream 而不是 CloudBlockBlob,则它可以正常工作)。
  • @Nick 那么以Stream 为类型,您可以看到发布后触发的函数吗?如何检查函数是否被触发?在我这边,它按预期工作。您可以转到 kudu(https://<functionappname>.scm.azurewebsites.net/DebugConsole) 并导航到 D:\home\LogFiles\Application\Functions\Host 以查看日志。
  • 是的,该函数以 Stream 作为类型触发。我正在使用 Azure 门户日志记录流检查函数的输出(FunctionApps -> 单击函数 -> 在屏幕底部展开“日志”)
  • @Nick 我明白了,有时日志面板可能会失去与日志流的连接。您可以尝试访问 kudu(按照我上面的建议)吗?如果你已经配置了Application Insights,你可以点击function->点击它的Monitorblade来查看执行结果。
  • 使用kudu,从日志中可以看到带有CloudBlockBlob签名的函数无法正确加载,出现如下错误“2018-12-17T09:11:15.466 [Error] Error indexing method 'MyFunctionName .Run'"
猜你喜欢
  • 2017-10-29
  • 2022-01-19
  • 2018-08-29
  • 2018-10-26
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多