输出绑定和function.json

时间:2017-12-14 17:59:27

标签: azure azure-functions

我正在尝试创建一个将输出到表的Azure函数。我正在使用Azure功能应用程序,因此,正如我目前所理解的那样,SDK为我生成了function.json。我的函数定义如下:

public static HttpResponseMessage Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, 
        TraceWriter log,
        [StorageAccount("table_storage")] ICollector<TableItem> outputTable)

我已将TableItem定义为继承自TableEntity的类。当我部署它并查看生成的function.json时,它没有提到输出参数绑定:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions.Generator-1.0.7",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "methods": [
        "post"
      ],
      "authLevel": "function",
      "name": "req"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/FunctionApp5.dll",
  "entryPoint": "FunctionApp5.DeliveryComplete.Run"
}

如果我从Visual Studio运行它,我会收到以下错误:

Cannot bind parameter 'outputTable' to type ICollector`1

我对这种行为有几个问题:第一个和主要的一个是,为什么function.json没有显示输出绑定?其次,我理解为什么从VS部署时无法编辑这个,但有没有办法管理绑定而不需要猜测(我在this post中使用了ICollector),但我找不到其他任何地方说它应该或不应该存在。

最后,如何(或确实)从桌面运行它与已发布的函数交互:它是否连接到已发布的函数版本,还是在本地生成function.json?

1 个答案:

答案 0 :(得分:3)

  1. 这是一个常见的混淆源,但输入和输出绑定在生成的function.json中不可见,只有触发器才能看到。他们仍然可以正常工作。

  2. 如果您尝试写入表存储,则应使用Table属性而不是StorageAccountAzure Table storage bindings for Azure Functions中提到了ICollector

  3. 在本地运行时,文件保留在本地并在本地运行时运行,无需部署到Azure。他们可能仍然通过绑定与真正的Azure服务进行交互。