当我尝试从ASP.Net Web应用程序使用Azure标识连接到Azure应用程序配置时,遇到了一个奇怪的行为。当前环境为.Net Framework 4.8,但在4.7.2和4.6.1中的行为相同。
我正在使用Microsoft.Extension.Configuration.AzureAppConfiguration 4.0.0和Azure.Identity 1.3.0。在本地开发过程中,我使用服务主体(环境中定义的AZURE_TENNT_ID、AZURE_CLIENT_ID和AZURE_CLIENT_SECRET(,并在AZURE上使用系统分配的应用程序服务的ManagedIdentity。
private IConfiguration GetConfiguration(string label = null)
{
TokenCredential credential = new DefaultAzureCredential();
return new Microsoft.Extensions.Configuration.ConfigurationBuilder()
.AddAzureAppConfiguration(options =>
{
options = options.Connect(
new Uri(Environment.GetEnvironmentVariable("APP_CONFIGURATION_ENDPOINT")), credential)
.ConfigureKeyVault(kv => { kv.SetCredential(credential); });
if (!string.IsNullOrEmpty(label))
{
options.Select(KeyFilter.Any, label);
}
else
{
options.Select(KeyFilter.Any, LabelFilter.Null);
}
})
.Build();
}
此代码片段在应用程序启动期间执行时有效,例如RouteConfig。所有后续调用都在工作,刷新也能正常工作。
问题开始于以后首次调用应用程序配置时,例如在请求期间。代码挂起,但没有错误消息。在我的特殊情况下,我无法在启动时连接到Azure应用程序配置。
当使用.Net Core时,一切都像一个符咒,但目前这不是一个选项。
这是日志。
在启动期间执行时:
Starting IIS Express ...
Successfully registered URL "http://localhost:5000/" for site "AppConfigTest3" application "/"
Registration completed for site "AppConfigTest3"
IIS Express is running.
Enter 'Q' to stop IIS Express
Loading configuration ...
Created DefaultAzureCredential: Azure.Identity.DefaultAzureCredential
Using Azure environment
Created ManagedIdentityCredential: Azure.Identity.DefaultAzureCredential
Connected via APP_CONFIGURATION_ENDPOINT: https://my-test-appconfig.azconfig.io
Before configure KeyVault credential
After configure KeyVault credential
Before executing Build()
EscalationMonitorInterval: 300
Created DefaultAzureCredential: Azure.Identity.DefaultAzureCredential
Using Azure environment
Created ManagedIdentityCredential: Azure.Identity.DefaultAzureCredential
Connected via APP_CONFIGURATION_ENDPOINT: https://my-test-appconfig.azconfig.io
Before configure KeyVault credential
After configure KeyVault credential
Before executing Build()
Azure Config loaded
Anforderung gestartet: "GET" http://localhost:5000/
如果在请求过程中第一次被调用,我会得到以下日志:
Starting IIS Express ...
Successfully registered URL "http://localhost:5000/" for site "AppConfigTest3" application "/"
Registration completed for site "AppConfigTest3"
IIS Express is running.
Enter 'Q' to stop IIS Express
Azure Config loaded
Anforderung gestartet: "GET" http://localhost:5000/
Response sent: http://localhost:5000/ with HTTP status 200.0
Anforderung gestartet: "GET" http://localhost:5000/Home/About
Loading configuration ...
Created DefaultAzureCredential: Azure.Identity.DefaultAzureCredential
Using Azure environment
Created ManagedIdentityCredential: Azure.Identity.DefaultAzureCredential
Connected via APP_CONFIGURATION_ENDPOINT: https://my-test-appconfig.azconfig.io
Before configure KeyVault credential
After configure KeyVault credential
Before executing Build()
什么都没有发生,请求也没有返回。
我在这一点上感到困惑。有人能解决这个问题吗?非常感谢。
谨致问候,Stati
这是因为Azure.Core
包1.4.1版本中引入了一个错误。该错误已在Azure.Core
1.9.0版本中修复。由于您引用的是Azure.Identity
版本1.3.0,因此您间接依赖于Azure.Core
版本1.6.0。
您的问题可以通过添加对Azure Core v1.9.0或更高版本的显式依赖来解决。