我正在将 Azure 函数应用程序从 .NET 6 移植到 .NET 8。这要求我转向隔离工人模型。效果很好。但是,我无法让使用
ConnectionString
的函数绑定在不将连接字符串本地存储在 local.settings.json
中的情况下很好地发挥作用。
以前在 .NET 6 中,我们会:
Startup.cs
,ConfigureAppConfiguration
期间,检查是否在开发环境中运行SecretClient
local.settings.json
仅使用 <secret>
作为连接字符串值:,然后秘密客户端负责将实际值分层在顶部。Run
定义如下所示:该函数将拾取连接字符串,一切都会完美地工作。
现在,在 .NET 8 隔离工作模型中,它不再起作用。似乎在启动时,应用程序对 local.settings.json
中的
实际连接字符串值以外的任何内容都不满意:
如果我只是将实际的连接字符串插入
local.settings.json
(其中<secret>
),一切正常。但尝试使用我们的旧方法是行不通的。这里在.NET 8的Program.cs
中重现:
有谁知道我应该如何在.NET 8隔离工作模型中本地提供秘密连接字符串?提前感谢您的帮助。
现在,在 .NET 8 隔离工作模型中,它不再起作用。
.Net 8 不支持启动类,因为它处于隔离的工作环境中。它在 InProcess 中工作,而不是在isolated 中工作。
如果连接字符串位于 keyVault 中作为替代方案,您可以使用以下方式从 .net 8 中的 keyvault 获取连接字符串:
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
"rithcon":"@Microsoft.KeyVault(SecretUri=https://rithkey1.vault.azure.net/secrets/testsecret/)"
}
}
以下是使用 keyvault 连接字符串的方法:
@Microsoft.KeyVault(SecretUri=https://keyvaultname.vault.azure.net/secrets/secretname/)
Output:
因此,通过使用上述方式,不需要启动等等。