我在 .NET 应用程序中使用 Azure 应用程序配置在启动时加载配置设置。但是,我遇到了两个需要帮助的问题:
应用程序启动时,加载 Azure 应用程序配置大约需要 10 秒。没关系,但是,在这段时间里,无法了解正在发生的事情。有没有办法启用
AddAzureAppConfiguration
的日志记录,以便我们知道它何时连接、重新连接等?
有没有办法缓存配置,让应用程序不必每次重启都等待10秒?
这是我用来添加 Azure 应用程序配置的代码:
using Azure.Identity;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;
namespace Api.Azure;
public static class AzureAppConfiguration
{
public static WebApplicationBuilder AddAzureAppConfiguration(this WebApplicationBuilder builder)
{
ArgumentNullException.ThrowIfNull(builder);
var endpoint = builder.Configuration["Azure:AppConfiguration:Endpoint"];
if (string.IsNullOrEmpty(endpoint))
{
// Azure App Configuration endpoint is not set, using local configuration...
return builder;
}
builder.Configuration.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri(endpoint), new DefaultAzureCredential())
.Select(KeyFilter.Any)
.ConfigureKeyVault(vaultOptions => vaultOptions.SetCredential(new DefaultAzureCredential()));
});
return builder;
}
}
假设应用程序和配置服务位于同一 DC,则延迟可能是由 DefaultAzureCredential 引起的。正如官方所说-
通过将 Azure 托管环境中使用的凭据与本地开发中使用的凭据相结合,简化了开发部署到 Azure 的应用程序时的身份验证。 生产中,最好用别的东西
还有这个 -
性能开销:顺序尝试多个凭据的过程可能会带来性能开销。例如,在本地开发计算机上运行时,托管标识不可用。因此,除非通过其相应的排除前缀属性明确禁用,否则 ManagedIdentityCredential 在本地开发环境中始终会失败。
添加下一段看看是否属实 -
using AzureEventSourceListener listener = new((args, message) =>
{
Console.WriteLine(message); //TODO: replace with a relevant output destination
}, EventLevel.LogAlways);