如何绑定到 ICloudBlob 或其他一些(非字符串)类型

How to bind to ICloudBlob or some other (not string) type

我一直在尝试创建一个 Azure 函数,该函数在我将图像添加到我的 blob 存储帐户上的容器时被触发。

唯一似乎有效的是当我有一个字符串参数时,但文件是图像,所以我没有用包含图像数据的字符串。

所以我一直在尝试我可以在网上找到的每一个示例(不是那么多),现在我已经尝试了 azure webjobs sdk 中的示例 - 这也不行。所以要么我是愚蠢的,我现在觉得,我错过了一些明显的东西?

我遇到了一些错误:

Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.thumbnailgenerator'. Microsoft.Azure.WebJobs.Host: Can't bind BlobTrigger to type 'Microsoft.WindowsAzure.Storage.Blob.ICloudBlob'.

Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.thumbnailgenerator'. Microsoft.Azure.WebJobs.Host: Can't bind BlobTrigger to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob'.

现在我正在尝试的函数是上面示例中给出的函数,就像我尝试过的许多其他函数一样,它只能处理字符串。

那么我应该如何创建函数(使用 C#)和 function.json 文件,使其与 blob 一起工作,最好是一个带有 blob 名称的字符串。那个或 blob in and one out,其中 out blob 的名称在不同的容器中,并且名称以硬编码字符串为前缀。

这是我现在得到的,不是运行:

function.json

{
  "bindings": [
{
  "type": "blobTrigger",
  "name": "blob",
  "direction": "in",
  "path": "kitimages/{name}.{ext}"
},
 {
        "type": "blob",
        "name": "output",
        "direction": "inout",
        "path": "thumbnails/{name}_300_200.{ext}"
    }  ],
  "disabled": false
}

run.csx

#r "Microsoft.WindowsAzure.Storage"
using System;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage.Blob;
public static void Run(CloudBlockBlob blob, CloudBlockBlob output, TraceWriter log)
{
    log.Info($"C# Blob trigger function processed a blob. Blob={blob.Name}");
}

编辑:在这里查看我的问题的最终解决方案:Getting work done in the cloud

我们需要改进此处的模板,这是您 运行 常犯的错误(对此深表歉意!)。我们正在修复,请参阅 GitHub 问题:Make it easier for users to get started with binary blob triggers.

有一个绑定到流的内置模板。转到 New Function 和 select C# 语言和 Samples 场景。

有关使用 CloudBlockBlob 绑定的更高级示例(需要尚未记录的 InOut 绑定方向),请参阅 ContosoMoments 中的函数示例:DeleteImages Function

请注意,您可以浏览 GitHub 存储库中的所有模板:https://github.com/Azure/azure-webjobs-sdk-templates

对于任何其他人来说,虽然看似按照上述正确设置,但偶然发现了这个问题:

我收到此消息是因为我在 project.json 文件中引用了 WindowsAzure.Storage。也许是因为它指的是图书馆的旧版本 (8.1.1)。我不知道。删除它使我的功能正常工作。由于它是受支持的 DLL,您应该使用 #r..

导入它

我找到了我的解决方案here(Baudine 的最后回复)。

我有一个直接引用 WindowsAzure.Storage nuget 的项目和一个函数项目,该项目还间接引用了 WindowsAzure.Storage(通过 Microsoft.Azure.WebJobs.Extensions.Storage nuget)。阅读 Baudine 的回答后,我看到版本关闭(v9.3.3 与 v9.3.1)。

所以我的修复是按照 Baudine 的建议:我从项目中删除了 WindowsAzure.Storage nuget 并添加了 Microsoft.Azure.WebJobs.Extensions.Storage。我的触发器如下所示:

public async Task Run([BlobTrigger("/files/{fileName}", Connection = "StorageConnectionString")]ICloudBlob blob, string fileName)