2

是否可以根据 Azure 应用配置服务中存储的值设置 Azure 持久函数的 TaskHub 名称?我的host.json文件是:

{
    "version": "2.0",
    "extensions": {
        "durableTask": {
            "hubName": "%TaskHubName%"
        }
    }
}

我正在尝试binder在我的 Orchestration 客户端中使用:

[FunctionName("Test_HttpStart")]
public static async Task<HttpResponseMessage> HttpStart(
    [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequestMessage req,
    IBinder binder)
{
    var starter = await binder.BindAsync<IDurableOrchestrationClient>(
        new DurableClientAttribute { TaskHub = Configuration["TaskHubName"] });

这在我TaskHubName定义时有效local.settings.json

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet",
        "TaskHubName": "TestTaskHubName"
}

但是,当我从 Azure 应用程序配置中删除它local.settings.json并取而代之的是检索此值时:

Configuration = new ConfigurationBuilder()
    .AddAzureAppConfiguration(options =>
    {
        _ = options.Connect(Environment.GetEnvironmentVariable("app-configuration-connection-string"))
            .Select(@"TaskHubName");
    })
    .AddEnvironmentVariables()
    .Build();

我收到错误:

Microsoft.Azure.WebJobs.Extensions.DurableTask:任务中心名称“%TaskHubName%”应仅包含字母数字字符,以字母开头,长度在 3 到 45 之间。 Microsoft.WindowsAzure.Storage:容器名称无效。有关有效容器命名的更多信息,请查看 MSDN。

因此,即使我可以看到 Azure App Configuration 中的值被下拉并存在于应用程序的配置中,但它看起来并没有被使用。是否可以使用 Azure App Configuration 中的值作为 Durable Function 的 TaskHub 名称?

4

1 回答 1

0

运行时绑定应该可以工作,但错误可能来自启动序列,启动序列从中获取host.json用于其他功能(如内部队列触发器)的值。

不幸的是,AFAIK 现在没有办法解决这个问题。

但是,您可以投票支持此功能请求以支持应支持此方案的应用程序配置参考。

于 2020-07-29T07:00:04.337 回答