我正在尝试在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 + "'.");
}
另一个函数绑定到CloudTable
作为输入参数,并且遭受相同的异常。
虽然绑定到CloudTable
应该可以工作(https://docs.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" />
答案 0 :(得分:0)
问题是两个Nuget软件包的版本不匹配。创建新解决方案时,我无法复制该问题,因此绑定到CloudTable
的效果很好。与我的解决方案进行比较后发现,我的功能项目引用了另一个依赖于
WindowsAzure.Storage (9.3.3)
因为我需要在其中输入TableEntity
类型。
现在变得越来越棘手。函数项目引用了
Microsoft.Azure.WebJobs.Extensions.Storage (3.0.6)
and that one has a dependency on
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”)混淆。不幸的是,WindowsAzure.Storage (9.3.3)
tell us to change to exactly that incorrect package的评论。
脑震荡:这真是一团糟:-)
答案 1 :(得分:0)
我遇到了类似的问题,当我尝试启动Azure Function V3时遇到了这个问题:
In [1666]: sys.version
Out[1666]: '3.7.3 (default, Apr 24 2020, 18:51:23) \n[Clang 11.0.3 (clang-1103.0.32.62)]'
In [1663]: pd.__version__
Out[1663]: '1.1.0'
In [1664]: df.query('`1A_col` == 1000')
Out[1664]:
AB 1A_col
0 1 1000
如前所述,我在项目中看到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
通过删除以下使用方法为我解决此问题:Microsoft.Azure.WebJobs.Extensions.Storage
并仅将其替换为using Microsoft.WindowsAzure.Storage.Table;
但是请注意,如果您使用的是ObjectFlattenerRecomposer.Core,它仍在使用using Microsoft.Azure.Cosmos.Table;
,尚不能与Microsoft.WindowsAzure.Storage.Table
一起使用。我已就此与开发人员联系。