将进程内Azure函数迁移到隔离函数-如何使用通用绑定器

ldioqlga  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个正在工作的.NET6进程内Azure函数。我正在将它转换为一个隔离的工作进程(进程外).net7函数。
我有一个HttpTrigger函数,它应该从blob存储中获取一个文件,因为blob存储是区分大小写的,并且所有文件都是以大写形式保存的,所以我需要将输入也设为大写。
使用in-proc函数时,我通过注入Microsoft.Azure.WebJobs.IBinder binder然后使用binder.BindAsync<byte[]>(new Microsoft.Azure.WebJobs.BlobAttribute($"%BlobContainerName%/{fooUpper}", FileAccess.Read)来完成此操作
这是.net6进程内函数:

[Function(nameof(GetFile))]
public async Task<IActionResult> GetFile(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "bar/{foo}")] HttpRequest req,
    Microsoft.Azure.WebJobs.IBinder binder, Microsoft.Azure.WebJobs.ExecutionContext context, string foo)
{
    // The file name is always upper-case:
    var fooUpper = foo.ToUpperInvariant();
    var blobStream = await binder.BindAsync<byte[]>(
            new Microsoft.Azure.WebJobs.BlobAttribute($"%BlobContainerName%/{fooUpper}", FileAccess.Read),
            req.FunctionContext.CancellationToken).ConfigureAwait(false);

        return await ExecuteAsync(fooUpper, context.FunctionDirectory, blobStream,
                req.FunctionContext.CancellationToken)
            .ConfigureAwait(false);
}

当然,我尝试过将HttpRequest req替换为HttpRequestData req,将此函数迁移到一个.net7隔离函数,它可以编译,但当我运行它时,binder始终是null
函数的隔离函数版本是什么?

  • 是否需要创建自定义属性?
  • 或者创建一些中间件,使URL大写?
  • 或者我应该创建一个服务,在启动时注册并在函数类中使用DI?

请指教。

cl25kdpy

cl25kdpy1#

检查我的以下发现是否有助于解决您的问题:
BlobContainerClient不再以隔离模式工作
AFAIK,BlobContainerClient应使用Azure.Storage.Blobs NuGet包在Azure Functions中与.NET独立进程版本7配合使用,如用户@HariKrishnaMS DOC的SO答案#75015570所示。

如果您使用NuGet包Azure.Storage.Blobs,则可以初始化在.NET独立进程中兼容的BlobContainerClient类对象,并且为了使用Blob容器对象,必须初始化BlobServiceClient以连接到存储帐户并访问Blob容器。

public HttpResponseData Run([Microsoft.Azure.Functions.Worker.HttpTrigger(AuthorizationLevel.Function, "get", Route = "bar/{foo}")] HttpRequestData req,
            BlobContainerClient blobContainerClient, IBinder binder, ExecutionContext executionContext)

这是一篇关于Azure Functions .NET隔离进程的GitHub文章,介绍了如何使用Ibinder输入参数进行数据绑定,同一篇文章中还提供了一些在IbinderStorageAccountAttribute上下文中工作的示例,例如Microsoft.Azure.WebJobs.BlobAttribute

相关问题