为什么 Azure Function v2 无法绑定到 CloudTable? [英] Why is Azure Function v2 unable to bind to CloudTable?

查看:12
本文介绍了为什么 Azure Function v2 无法绑定到 CloudTable?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 Visual Studio 2019 中运行 HTTP 触发的 v2 函数.它应该将其输出写入到名为历史"的 Azure 存储表中.

I'm trying to run an HTTP triggered v2 function in Visual Studio 2019. It's supposed to write its output into an Azure Storage Table called "history".

我已经用我的函数装饰了一个

I've decorated one my functions with

[return: Table("history")]

我让它返回 TableEntity 的子类.

and I make it return a subclass of TableEntity.

这会导致无法将表绑定到 CloudTable"的异常.异常的原因是 CloudStorageAccount 客户端代码中的检查:

This results in an exception about it being "unable to bind Table to CloudTable". The reason for the exception is a check within the CloudStorageAccount client's code:

bool bindsToEntireTable = tableAttribute.RowKey == null;
if (bindsToEntireTable)
{
  // This should have been caught by the other rule-based binders. 
  // We never expect this to get thrown. 
  throw new InvalidOperationException("Can't bind Table to type '" + parameter.ParameterType + "'.");
}

另一个函数作为输入参数绑定到 CloudTable 并遇到相同的异常.

Another function binds to a CloudTable as an input parameter and suffers from the same exception.

虽然绑定到 CloudTable 应该可以工作(https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-table#input---c-example---cloudtable)它显然没有.

Although binding to CloudTable should work (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-table#input---c-example---cloudtable) it apparently does not.

这是 Azure 存储的客户端 SDK 中的错误还是我做错了什么?我引用了这些 Nuget 包:

Is this a bug in the client SDKs for Azure Storage or am I doing something wrong? I'm referencing these Nuget packages:

 <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.8.3" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.6" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="2.2.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />

推荐答案

问题是两个 Nuget 包的版本不匹配.在创建新解决方案时,我无法复制问题并且绑定到 CloudTable 工作得很好.与我的解决方案相比,我发现我的函数项目引用了另一个依赖于

The problem is a version mismatch of two Nuget packages. When creating a new solution I was unable to replicate the issue and binding to CloudTable worked just fine. Comparing to my solution revealed that my function project referenced another project which had a dependency on

WindowsAzure.Storage (9.3.3)

因为我需要 TableEntity 类型.

现在变得棘手了.函数项目引用了

And now it's getting tricky. The functions project has a reference to

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

并且依赖于

WindowsAzure.Storage (9.3.1)

9.3.3 和 9.3.1 的版本差异导致绑定问题.解决方案是在引用的项目中降级到 9.3.1

The version difference of 9.3.3 and 9.3.1 leads to the binding problems. The solution is to either downgrade to 9.3.1 in the referenced project

或者(并且可能推荐):从引用的项目中删除 WindowsAzure.Storage 并将其替换为还包含 TableEntity 的 Microsoft.Azure.Cosmos.Table.重要不要将此与已弃用的 Microsoft.Azure.CosmosDB.Table(注意DB")混淆.不幸的是,WindowsAzure.Storage (9.3.3) 的评论告诉我们更改为完全不正确的包.

alternatively (and probably recommended): remove WindowsAzure.Storage from the referenced project and replace it with Microsoft.Azure.Cosmos.Table which also contains TableEntity. Important do NOT confuse this with Microsoft.Azure.CosmosDB.Table (notice the "DB") which is being deprecated. Unfortunately, the comments for WindowsAzure.Storage (9.3.3) tell us to change to exactly that incorrect package.

脑震荡:一团糟 :-)

Concusion: it's a hot mess :-)

这篇关于为什么 Azure Function v2 无法绑定到 CloudTable?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆