Azure Functions Bindings无法正常工作

时间:2017-07-02 06:43:25

标签: c# azure azure-functions azure-functions-runtime

我收到此错误:

  

Microsoft.Azure.WebJobs.Host:只有'Read'FileAccess模式   支持blob容器绑定。

根据docs,应该支持out?

我最初尝试在方法定义中添加了Attributes。但是,我得到了相同的错误,所以我删除了方法定义中的所有属性,因此新的方法定义是:

public static async Task RunAsync(CloudBlockBlob myBlob,  string name, 
IAsyncCollector<ProfilePictureUrl> client, CloudBlockBlob resizedBlob, TraceWriter log)

这是我的function.json

{
  "bindings": [
    {
      "type": "blobTrigger",
      "path": "profile-pictures/{name}",
      "direction": "in",
      "name": "myBlob"
    },
    {
      "type": "documentDB",
      "databaseName": "TestDB",
      "collectionName": "ResizedProfilePictures",
      "createIfNotExists": true,
      "direction": "out",
      "name": "client"
    },
    {
      "type": "blob",
      "path": "resized-profile-pictures",
      "direction": "out",
      "name": "resizedBlob"
    }
  ],
  "disabled": false,
  "scriptFile": "..\\Test.Functions.dll",
  "entryPoint": "Test.Functions.ResizeImage.RunAsync"
}

我正在使用Azure CLI beta 100.如果我从方法定义和function.json中删除resizedBlob,那么它可以正常工作。

4 个答案:

答案 0 :(得分:1)

必须将CloudBlobContainer绑定为输入绑定。这是一个有效的例子:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Blob;

public static void Run(Stream input, Stream output, 
                       CloudBlobContainer container, TraceWriter log)
{
    var blobs = container.ListBlobs();
    log.Info($"{blobs.Count()} blobs in container.");
}

和相应的function.json:

{
  "bindings": [
    {
      "name": "input",
      "type": "blobTrigger",
      "direction": "in",
      "path": "input/{name}",
      "connection": "test_STORAGE"
    },
    {
      "name": "container",
      "type": "blob",
      "direction": "in",
      "path": "input",
      "connection": "test_STORAGE"
    }
  ]
}

答案 1 :(得分:0)

CloudBlobContainer不是listed作为输出绑定的受支持类型。因此,您需要使用列出的类型之一。

我想,您正在尝试动态设置输出文件的名称。要实现此目的,您需要将名称绑定到触发器参数(例如{name}),或者使用命令式绑定(就像您已经为输出绑定所做的那样)。

如果您有其他用例,请使用代码示例扩展您的问题。

如果您确实需要CloudBlobContainer参数,请将其列为另一个in绑定。

答案 2 :(得分:0)

这应该适用于新发布的函数VS工具(非预览版)。你能更新到最新的位吗?

对于VS工具,函数现在以与webjobs相同的方式直接加载DLL,因此所有webjobs绑定都将按原样工作。然后,Function.json中唯一的东西是触发器绑定和&#34; configurationSource&#34;:&#34;属性&#34;属性。该属性告诉它使用属性而不是function.json。 [1]

[1]见https://github.com/Azure/azure-webjobs-sdk-script/issues/1508

答案 3 :(得分:0)

问题是一个错误,现在已在最新版本的函数中修复。

https://github.com/Azure/azure-webjobs-sdk-script/issues/1783