为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Azure Function v2 无法绑定到 CloudTable?

为什么 Azure Function v2 无法绑定到 CloudTable?

C#
慕斯709654 2023-07-22 18:16:46
我正在尝试在 Visual Studio 2019 中运行 HTTP 触发的 v2 函数。它应该将其输出写入名为“历史记录”的 Azure 存储表中。我用以下方法装饰了我的函数[return: Table("history")]我让它返回 的子类TableEntity。这会导致出现“无法将表绑定到 CloudTable”的异常。异常的原因是CloudStorageAccount客户端代码中的检查: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 + "'.");}另一个函数绑定到 aCloudTable作为输入参数并遇到相同的异常。尽管绑定到CloudTable应该有效(https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-table#input---c-example---cloudtable),但它显然不起作用。这是 Azure 存储客户端 SDK 中的错误还是我做错了什么?我引用这些 Nuget 包: <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" />
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

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

WindowsAzure.Storage (9.3.3)

因为我需要TableEntity那里的类型。

现在事情变得棘手了。功能项目有参考

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

那一个依赖于

WindowsAzure.Storage (9.3.1)

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

或者

或者(可能是推荐的):WindowsAzure.Storage从引用的项目中删除并将其替换为Microsoft.Azure.Cosmos.Table也包含TableEntity重要的是不要将其与Microsoft.Azure.CosmosDB.Table正在弃用的(注意“DB”)混淆。


查看完整回答
反对 回复 2023-07-22
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我遇到了类似的问题,当我尝试启动 Azure Function V3 时遇到此问题:

Error indexing method 'Function' Cannot bind parameter 'Table' to type CloudTable. Make sure the parameter Type is supported by the binding. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

如前所述,我在我的项目中看到有WindowsAzure.Storage一个警告标志并声明它已被弃用。

//img2.sycdn.imooc.com/64bbacb3000100d407110849.jpg

让我的项目监听表存储事件的修复方法是更改使用。显然我已经在我的项目中使用了对 Cosmos 的引用Microsoft.Azure.WebJobs.Extensions.Storage

//img4.sycdn.imooc.com/64bbacc00001900407070519.jpg

通过删除 using: 来解决这个问题,using Microsoft.WindowsAzure.Storage.Table;只需将其替换为using Microsoft.Azure.Cosmos.Table;

但请注意,如果您正在使用ObjectFlattenerRecomposer.Core,它仍在使用Microsoft.WindowsAzure.Storage.Table并且尚无法使用Microsoft.Azure.Cosmos.Table。我已就此事联系开发商。



查看完整回答
反对 回复 2023-07-22
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信