gpt4 book ai didi

.net - 尝试使用环境变量作为配置源时,容器化 Azure 函数(v4、dotnet-isolated)中断

转载 作者:行者123 更新时间:2023-12-03 00:54:41 33 4
gpt4 key购买 nike

这源于 previous question 。我正在尝试构建一个 Azure 函数,以使用 .NET 6 和函数运行时 v4 在隔离进程中作为 Linux 容器镜像运行。

我已关注Microsoft guide使用 HTTP 触发器获得一个可正常运行的示例函数。然后我开始将代码添加到应用程序中,并立即被阻止。这是我的ProgramMain方法:

public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration((context, builder) =>
{
builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
builder.AddEnvironmentVariables();
})
.ConfigureServices((context, collection) => ConfigureServices(collection, context.Configuration))
.Build();

host.Run();
}

我发现该函数工作正常,直到我添加行 builder.AddEnvironmentVariables();。仅通过此更改,该函数就会在启动时突然崩溃,但出现以下异常:

System.InvalidOperationException at Microsoft.Azure.WebJobs.Script.Workers.Rpc.RpcFunctionInvocationDispatcherLoadBalancer.GetLanguageWorkerChannel

那里隐藏着一条消息,说“没有找到任何初始化的语言 worker ”,我理解这是 Azure Function 语言,表示“启动期间发生了一些不好的事情,但我不会告诉你是什么或为什么”。

在我的特定用例中,我依赖于能够使用环境变量作为配置源的函数,因为我的管道会将这些变量作为站点配置传递给 ARM 模板。所以我的问题是,在隔离模式下这怎么可能?

最佳答案

事实证明,环境变量是通过调用 ConfigureFunctionsWorkerDefaults 自动添加的。您可以在 WorkerHostBuilderExtensions 中看到这一点。我不知道为什么尝试以传统的 dotnet core 方式添加环境变量作为配置源会导致整个事情崩溃,但至少我没有被阻止。希望这对其他人有帮助。

还值得指出的是,这将影响您使用 ConfigureAppConfigurationConfigureFunctionsWorkerDefaults 扩展的顺序。由于后者添加控制台输入和环境变量作为配置源,如果您还使用磁盘上的 appsettings.json ,您可能会希望环境变量覆盖其配置,因此需要调用 ConfigureFunctionsWorkerDefaults < em>之后 ConfigureAppConfiguration。因此我的程序看起来像这样:

public class Program
{
public static async Task Main()
{
var host = new HostBuilder()
.ConfigureAppConfiguration((context, configurationBuilder) =>
{
configurationBuilder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

if (context.HostingEnvironment.IsDevelopment())
{
configurationBuilder.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
}
else
{
configurationBuilder.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
}
})
.ConfigureFunctionsWorkerDefaults()
.ConfigureServices((context, collection) => ConfigureServices(collection, context.Configuration))
.Build();

await host.RunAsync();
}

private static void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
services
.AddLogging()
.AddDomainLayer(configuration)
.AddHttpLayer(configuration)
.AddKeyVaultLayer(configuration);
}
}

关于.net - 尝试使用环境变量作为配置源时,容器化 Azure 函数(v4、dotnet-isolated)中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72291001/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com