Azure Function App v4 + .NET 6.0(处理中)+ Blob 绑定(未触发)= 无法将 Blob 绑定到类型错误
Azure Function App v4 + .NET 6.0 (in process) + Blob binding (not trigger) = Can't bind Blob to type error
即使在 hello world 函数中,我也无法使此组合正常工作。我想要一个消耗 table 和 blob 的函数,但不是作为触发器(触发器是计时器)。
当我在本地 运行 函数应用程序时,我得到
Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.
Possible causes:
1) Tried binding to 'Azure.Storage.Blobs.BlobContainerClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
2) Tried binding to 'Microsoft.Azure.WebJobs.Extensions.Storage.Blobs.Config.BlobsExtensionConfigProvider+MultiBlobContext, Microsoft.Azure.WebJobs.Extensions.Storage.Blobs, Version=5.0.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
3) Tried binding to 'System.IO.Stream, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
4) Tried binding to 'Azure.Storage.Blobs.Specialized.BlockBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
5) Tried binding to 'Azure.Storage.Blobs.Specialized.PageBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
6) Tried binding to 'Azure.Storage.Blobs.Specialized.AppendBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
7) Tried binding to 'Azure.Storage.Blobs.BlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
8) Tried binding to 'Azure.Storage.Blobs.Specialized.BlobBaseClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
为了创建这个,我做了以下操作:
- 正在使用 .NET 6.0 创建新的函数应用程序项目
- 创建了以下函数:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Table;
namespace FunctionApp1
{
public class Function1
{
[FunctionName("Function1")]
public void Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[Blob("activity-events", Connection = "StorageAccountBlobEndpoint")] CloudBlobContainer cloudBlobContainer,
ILogger log
)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
完整的 CSPROJ 是
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.0" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
我将来也想有一个 table 绑定,我知道这会排除 Microsoft.Azure.WebJobs.Extensions.Storage 的 V 5.X。
我可能遗漏了一些基本的东西,但如果有人能识别我将不胜感激。
由于您的 input/trigger 绑定是一个计时器,您是否正在查看 blob 和 table 输出绑定?
我相信一些事情:
public class Function1
{
[FunctionName("Function1")]
public void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,
[Blob("activity-events", FileAccess.Write, Connection = "MyBlobConnString")] out Stream myblob,
ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
//DO SOMETHING WITH myBlob before function exits
}
}
好吧,正如预期的那样,它似乎相当简单 - 我没有从 Microsoft.WindowsAzure.Storage.Blob
引用 CloudBlobContainer
,而是从 Microsoft.Azure.Cosmos.Table
.[=13= 引用它]
旁注:这打开了一个巨大的潘多拉魔盒,里面装满了我现在需要在这个现有解决方案中修复的其他东西。
即使在 hello world 函数中,我也无法使此组合正常工作。我想要一个消耗 table 和 blob 的函数,但不是作为触发器(触发器是计时器)。
当我在本地 运行 函数应用程序时,我得到
Microsoft.Azure.WebJobs.Host: Error indexing method 'Function1'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer'.
Possible causes:
1) Tried binding to 'Azure.Storage.Blobs.BlobContainerClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
2) Tried binding to 'Microsoft.Azure.WebJobs.Extensions.Storage.Blobs.Config.BlobsExtensionConfigProvider+MultiBlobContext, Microsoft.Azure.WebJobs.Extensions.Storage.Blobs, Version=5.0.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
3) Tried binding to 'System.IO.Stream, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
4) Tried binding to 'Azure.Storage.Blobs.Specialized.BlockBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
5) Tried binding to 'Azure.Storage.Blobs.Specialized.PageBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
6) Tried binding to 'Azure.Storage.Blobs.Specialized.AppendBlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
7) Tried binding to 'Azure.Storage.Blobs.BlobClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
8) Tried binding to 'Azure.Storage.Blobs.Specialized.BlobBaseClient, Azure.Storage.Blobs, Version=12.10.0.0, Culture=neutral, PublicKeyToken=92742159e12e44c8' but user type assembly was 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer, Microsoft.WindowsAzure.Storage, Version=9.3.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
为了创建这个,我做了以下操作:
- 正在使用 .NET 6.0 创建新的函数应用程序项目
- 创建了以下函数:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.WindowsAzure.Storage.Table;
namespace FunctionApp1
{
public class Function1
{
[FunctionName("Function1")]
public void Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[Blob("activity-events", Connection = "StorageAccountBlobEndpoint")] CloudBlobContainer cloudBlobContainer,
ILogger log
)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
完整的 CSPROJ 是
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.5" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.0" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
我将来也想有一个 table 绑定,我知道这会排除 Microsoft.Azure.WebJobs.Extensions.Storage 的 V 5.X。
我可能遗漏了一些基本的东西,但如果有人能识别我将不胜感激。
由于您的 input/trigger 绑定是一个计时器,您是否正在查看 blob 和 table 输出绑定?
我相信一些事情:
public class Function1
{
[FunctionName("Function1")]
public void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer,
[Blob("activity-events", FileAccess.Write, Connection = "MyBlobConnString")] out Stream myblob,
ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
//DO SOMETHING WITH myBlob before function exits
}
}
好吧,正如预期的那样,它似乎相当简单 - 我没有从 Microsoft.WindowsAzure.Storage.Blob
引用 CloudBlobContainer
,而是从 Microsoft.Azure.Cosmos.Table
.[=13= 引用它]
旁注:这打开了一个巨大的潘多拉魔盒,里面装满了我现在需要在这个现有解决方案中修复的其他东西。