Azure Function v3 无法将 blob 绑定到 CloudBlockBlob
Azure Function v3 unable to bind blob to CloudBlockBlob
Azure 函数 v3 运行使用 azure-functions-core-tools@3 6.14.4.
在 VS19 (.Net SDK) 上的时间
我正在使用 时间触发器 并在 blob 上执行 read/write。
但是绑定失败了。
我已按照文档上的所有说明进行操作,并尝试了 Whosebug 中针对 Azure Functions v2 的其他解决方案,但我无法修复绑定。
我什至通过门户网站的集成功能创建了绑定,然后使用了它 function.json 但弹出了同样的错误。
我需要解决2个问题:
正在修复绑定错误,如下所述。
[来自不同的 azure 函数] 将应用程序发布到 Azure 后,function.json 被服务器覆盖,导致绑定丢失,因此绑定保留在 function.json也是必需的(尽管在文档中声称它由服务管理并且不建议编辑)。
第一个问题的信息:
运行 函数如下所示:
public static async Task Run([TimerTrigger("0 */10 * * * *")]TimerInfo myTimer, ILogger log,
[Blob("container/blob.json", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob stateStore)
Function.json :
{
"bindings": [
{
"name": "myTimer",
"direction": "in",
"type": "timerTrigger",
"schedule": "0 */10 * * * *"
},
{
"name": "stateStore",
"direction": "inout",
"type": "blob",
"path": "container/blob.json",
"connection": "AzureWebJobsStorage"
}
]
}
host.json
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
},
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
}
Csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Storage.Blobs" Version="12.4.2" />
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.2.1" />
<PackageReference Include="Azure.Storage.Queues" Version="12.3.0" />
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.14.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.KeyVault" Version="3.0.5" />
<PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.4.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.11" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.8" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.4" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.153.0" />
<PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services" />
</ItemGroup>
</Project>
执行时出错:
1 functions loaded
[14-05-2020 10:17:11] Generating 1 job function(s)
[14-05-2020 10:17:11] Microsoft.Azure.WebJobs.Host: Error indexing method 'FunctionAppName'.
Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'stateStore' to type CloudBlockBlob.
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.).
在我看来,将可用的多个存储 sdk 与可用的最新运行时混合在一起是个问题。
WindowsAzure.Storage
是 legacy Azure.Storage.Blobs
似乎也是错误的。尝试删除它们并添加 Microsoft.Azure.Storage.Blob
nuget 包。
Azure.Storage.Blobs 是可用于处理 blob 的最新 nuget 包,Microsoft recommends 也在使用它。
我不知道你的确切用例,但我正在使用我绑定的 BlobTrigger
public void DoSomething([BlobTrigger("blog-storage/{filename}")] Stream blob, ...)
{
...
}
这适用于新的 sdk 版本。
另外 here 您可以找到如何使用 sdk 的文档。
好像包又出问题了?我使用基于目标框架 netcoreapp3.1 的 Azure Functions v3。对于使用 Blob 触发器的函数,我收到以下错误消息:
The 'DataSync' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'DataSync'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.
问题发生在我更新包Azure.AI.FormRecognizer (3.1.1)和Microsoft.Azure.WebJobs.Extensions.Storage (4.0.5).
using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Table;
<PackageReference Include="Azure.AI.FormRecognizer" Version="3.1.1" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
有人知道包依赖性有任何问题吗?
我找到了适合我的解决方案:
“Azure.AI.FormRecognizer”依赖于.NETStandard,版本=v2.0
“Microsoft.Azure.WebJobs.Extensions.Storage”依赖于.NETStandard,版本=v2.0
在我的函数有以下目标框架之前:.NET Core 3.1
Azure 函数 v3 运行使用 azure-functions-core-tools@3 6.14.4.
在 VS19 (.Net SDK) 上的时间我正在使用 时间触发器 并在 blob 上执行 read/write。 但是绑定失败了。 我已按照文档上的所有说明进行操作,并尝试了 Whosebug 中针对 Azure Functions v2 的其他解决方案,但我无法修复绑定。 我什至通过门户网站的集成功能创建了绑定,然后使用了它 function.json 但弹出了同样的错误。
我需要解决2个问题:
正在修复绑定错误,如下所述。
[来自不同的 azure 函数] 将应用程序发布到 Azure 后,function.json 被服务器覆盖,导致绑定丢失,因此绑定保留在 function.json也是必需的(尽管在文档中声称它由服务管理并且不建议编辑)。
第一个问题的信息:
运行 函数如下所示:
public static async Task Run([TimerTrigger("0 */10 * * * *")]TimerInfo myTimer, ILogger log,
[Blob("container/blob.json", FileAccess.ReadWrite, Connection = "AzureWebJobsStorage")] CloudBlockBlob stateStore)
Function.json :
{
"bindings": [
{
"name": "myTimer",
"direction": "in",
"type": "timerTrigger",
"schedule": "0 */10 * * * *"
},
{
"name": "stateStore",
"direction": "inout",
"type": "blob",
"path": "container/blob.json",
"connection": "AzureWebJobsStorage"
}
]
}
host.json
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
},
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
}
}
}
}
Csproj:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Storage.Blobs" Version="12.4.2" />
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.2.1" />
<PackageReference Include="Azure.Storage.Queues" Version="12.3.0" />
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.14.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.KeyVault" Version="3.0.5" />
<PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="1.4.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.1.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.11" />
<PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.1.8" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.4" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
<PackageReference Include="Microsoft.TeamFoundationServer.Client" Version="16.153.0" />
<PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services" />
</ItemGroup>
</Project>
执行时出错:
1 functions loaded
[14-05-2020 10:17:11] Generating 1 job function(s)
[14-05-2020 10:17:11] Microsoft.Azure.WebJobs.Host: Error indexing method 'FunctionAppName'.
Microsoft.Azure.WebJobs.Host: Cannot bind parameter 'stateStore' to type CloudBlockBlob.
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.).
在我看来,将可用的多个存储 sdk 与可用的最新运行时混合在一起是个问题。
WindowsAzure.Storage
是 legacy Azure.Storage.Blobs
似乎也是错误的。尝试删除它们并添加 Microsoft.Azure.Storage.Blob
nuget 包。
Azure.Storage.Blobs 是可用于处理 blob 的最新 nuget 包,Microsoft recommends 也在使用它。
我不知道你的确切用例,但我正在使用我绑定的 BlobTrigger
public void DoSomething([BlobTrigger("blog-storage/{filename}")] Stream blob, ...)
{
...
}
这适用于新的 sdk 版本。
另外 here 您可以找到如何使用 sdk 的文档。
好像包又出问题了?我使用基于目标框架 netcoreapp3.1 的 Azure Functions v3。对于使用 Blob 触发器的函数,我收到以下错误消息:
The 'DataSync' function is in error: Microsoft.Azure.WebJobs.Host: Error indexing method 'DataSync'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.
问题发生在我更新包Azure.AI.FormRecognizer (3.1.1)和Microsoft.Azure.WebJobs.Extensions.Storage (4.0.5).
using Azure;
using Azure.AI.FormRecognizer;
using Azure.AI.FormRecognizer.Models;
using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Table;
<PackageReference Include="Azure.AI.FormRecognizer" Version="3.1.1" />
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
<PackageReference Include="Microsoft.Extensions.Configuration.AzureAppConfiguration" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.13" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
有人知道包依赖性有任何问题吗?
我找到了适合我的解决方案: “Azure.AI.FormRecognizer”依赖于.NETStandard,版本=v2.0 “Microsoft.Azure.WebJobs.Extensions.Storage”依赖于.NETStandard,版本=v2.0
在我的函数有以下目标框架之前:.NET Core 3.1