如何绑定到 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)
我一直在尝试创建一个 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)