我的Azure应用程序配置端点有什么问题?



我使用微软教程构建了两个测试网核心mvc测试应用程序。

  1. 构建一个使用Azure应用配置连接字符串的应用

    快速入门:创建一个ASP。. NET Core应用与Azure应用配置

  2. 构建一个使用托管身份来使用Azure应用配置的应用(我的应用TestAppConfigMi)

    使用受管理的身份访问App Configuration

第一个测试使用连接字符串在本地运行。第二个有错误,表明Azure应用程序配置端点或客户端是空的。

  • 两个应用的端点是相同的
  • 客户端可能不正确,但存在于第二个应用

我没有多少经验。我的故障排除过程如下:

  • TestAppConfigMi项目在Visual Studio本地构建
  • 在Azure浏览器启动HTTP 500.30

Azure诊断

Application: w3wp.exe
CoreCLR Version: 5.0.921.35908
.NET Version: 5.0.9
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentNullException: Value cannot be null. (Parameter 'uriString')
at System.Uri..ctor(String uriString)
at TestAppConfigMi.Program.<>c__DisplayClass1_0.<CreateHostBuilder>b__2(AzureAppConfigurationOptions options) in D:aTestAppConfigMiTestAppConfigMiProgram.cs:line 29
at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationSource.<>c__DisplayClass3_0.<.ctor>b__0()
at Microsoft.Extensions.Configuration.AzureAppConfiguration.AzureAppConfigurationSource.Build(IConfigurationBuilder builder)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Microsoft.Extensions.Hosting.HostBuilder.BuildAppConfiguration()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at TestAppConfigMi.Program.Main(String[] args) in D:aTestAppConfigMiTestAppConfigMiProgram.cs:line 17

在Program.cs(第29行)

options.Connect(new Uri(settings["AppConfig:Endpoint"]), new ManagedIdentityCredential("26e962f7-1a26-4f11-84d4-3bfcdd9f7dcc"))

(第17行)
CreateHostBuilder(args).Build().Run();

在Visual Studio AppConfig:Endpoint In appsettings.json

"AppConfig": {
"Endpoint": "xxxx"

与secrets相同。Json在第一个工作应用

{
"ConnectionStrings:AppConfig": "Endpoint=xxxxx"
}

安装了两个包:Azure。身份1.5.0Microsoft.Azure.AppConfiguration.AspNetCore 4.5.0

调试引用是一个为空的标识符。不管我怎么看,它都有价值。所以我希望是"未找到"或者"证书错误";消息类型。而不是应用程序失败。

读取堆栈跟踪信息:

Exception Info: System.ArgumentNullException: Value cannot be null. (Parameter 'uriString')
at System.Uri..ctor(String uriString) //<== BAM!

所以settings["AppConfig:Endpoint"]必须返回null:

options.Connect(new Uri(settings["AppConfig:Endpoint"]), 

解决这个问题,你就解决了你的(当前)问题。

要检查您的提供程序是否运行,只需调试并检查settings,您将看到所有可用的提供程序及其解析值的列表,我的猜测是它是一个打字错误,或者它不存在。

我使用以下更改修复了此问题:

下面是微软教程代码使用托管身份访问应用程序配置

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
config.AddAzureAppConfiguration(options =>
options.Connect(new Uri(settings["AppConfig:Endpoint"]), new ManagedIdentityCredential()));
})
.UseStartup<Startup>());

下面是本地运行的工作代码(VS Azure服务认证&我有系统管理的身份数据所有者&Azure应用程序配置服务的数据阅读器角色)&;到Azure(应用服务系统管理的身份数据所有者& &;Azure应用程序配置服务的数据阅读器角色)

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
{
var settings = config.Build();
var appConfigurationEndpoint = settings["AzureAppConfigurationEndpoint"];
config.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri(appConfigurationEndpoint), new DefaultAzureCredential());
});
webBuilder.UseStartup<Startup>();
});
});

appsettings。json是:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"

}
},
"AllowedHosts": "*",
"AzureAppConfigurationEndpoint": "https://xxxxxxxxxxx.azconfig.io"
}

我还没有研究这些变化产生差异的原因。我应该!但实际上,这只是一个大项目的一个小模块。然而,我确实尝试了各种组合(试图包括尽可能多的教程代码)

我认为问题在于本地开发需要在云部署之前取得成功。因此,我们需要在两种环境中无缝工作的代码。因此,使用DefaultAzureCredential()而不是ManagedIdentityCredentials()似乎更可取。

我注意到Azure。身份文档声明后一个ManagedIdentityCredentials()"尝试使用分配给部署环境的托管身份进行身份验证";但没有详细说明为什么前DefaultAzureCredential()只是"旨在通过处理具有合理默认行为的常见场景来简化开始使用SDK"?

然而,在我看来,一个基础教程,比如这一个,应该考虑诸如"开始"之类的术语;,"simplification"优先考虑。此外,看到代码在本地工作的重要性也不应该被低估。

我欢迎任何人对这些变化发表意见。特别是在每个示例中处理Azure应用程序配置端点的方式。

相关内容

  • 没有找到相关文章

最新更新