C# Azure应用程序配置在Azure函数运行时未更新
我正在使用azure应用程序配置和azure功能 因此,我从azure应用程序配置中提取所有关键值。但是如果azure函数正在运行,并且如果我从azure应用程序配置中对键值进行了任何更改,azure func将不会显示更新后的值 下面是我已经实现的代码 在startup.cs中C# Azure应用程序配置在Azure函数运行时未更新,c#,azure-functions,azure-app-configuration,C#,Azure Functions,Azure App Configuration,我正在使用azure应用程序配置和azure功能 因此,我从azure应用程序配置中提取所有关键值。但是如果azure函数正在运行,并且如果我从azure应用程序配置中对键值进行了任何更改,azure func将不会显示更新后的值 下面是我已经实现的代码 在startup.cs中 public override void Configure(IFunctionsHostBuilder builder) { var environmentName = Env
public override void Configure(IFunctionsHostBuilder builder)
{
var environmentName = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT");
if (string.IsNullOrWhiteSpace(environmentName))
throw new Exception("AZURE_FUNCTIONS_ENVIRONMENT could not be resolved.");
var hostEnvironment = new HostEnvironment { EnvironmentName = environmentName };
var config = SetUpConfiguration(builder.Services, hostEnvironment);
var appSettings = config.Get<TSettings>();
appSettings.AppName = _appName;
builder.Services.AddSingleton<ICorrelationIdProvider>(new FunctionAppCorrelationIdProvider());
builder.Services.AddSingleton<IIdentityProvider>(new FunctionAppIdentityProvider(appSettings.AppName));
builder.Services.AddSingleton<IHostEnvironment>(hostEnvironment);
builder.Services.AddSingleton(appSettings);
}
private IConfiguration SetUpConfiguration(IServiceCollection services, IHostEnvironment environment)
{
var executionContextOptions = services.BuildServiceProvider().GetService<IOptions<ExecutionContextOptions>>().Value;
var configBuilder = new ConfigurationBuilder().Initialize(environment, executionContextOptions.AppDirectory);
var config = configBuilder.Build();
services.AddSingleton<IConfiguration>(new ConfigurationRoot(config.Providers.ToArray()));
return config;
}
在azure函数中,我使用下面的代码来获取值
var test = _settings.AzureFuncTest;
但是在这里,在我不重新启动azure函数之前,我不会得到新的值。我已经更新了问题中的
SetUpConfiguration
方法,将代码包含在设置应用程序配置的助手方法中。虽然问题不包括如何使用helper方法,但以下代码将确保configurationRefresher
已初始化
专用IConfiguration SetUpConfiguration(iSeries收集服务、IHostEnvironment环境)
{
var executionContextOptions=services.BuildServiceProvider().GetService().Value;
var configBuilder=new ConfigurationBuilder().Initialize(环境,executionContextOptions.AppDirectory);
IConfigurationRefresh配置Refresh=null;
TokenCredential TokenCredential=新的DefaultAzureCredential();
configBuilder.AddAzureAppConfiguration(appConfigurationOptions=>
{
var settings=configBuilder.Build();
应用程序配置选项
.Connect(新Uri(设置[“AppConfig:Endpoint”]),令牌凭据)
.选择(ConfigurationKeys.AZURE功能测试)
.选择(KeyFilter.Any,environment.EnvironmentName)
.ConfigureRefresh(刷新选项=>
{
refreshOptions.Register(ConfigurationKeys.AZURE_FUNC_TEST,false);
设置缓存过期时间(TimeSpan.FromMinutes(1));
});
ConfigurationRefresh=appConfigurationOptions.getRefresh();
});
var configuration=configBuilder.Build();
服务。AddSingleton(配置刷新器);
services.AddSingleton(配置);
返回配置;
}
另外,语句
var-appSettings=config.Get()
将在此时创建设置的副本,并且不会反映IConfiguration
实例中的更改。要查看最新设置,请按说明使用IOptionsMonitor
。@JasonPan我同意,但我希望它用于azure功能。在azure函数中,如何刷新it@JasonPan我正在获取ConfigurationRefresh=options.getRefresh();如果为空,我尝试了这一点,是的,我得到了配置刷新值,当我在函数app wait_configurationRefresher.tryrefreshaync()中写入这一行时;当我检查时,我看到了新的值,但是配置仍然有旧的值,并且没有更新。你检查了哪个变量显示了新的值?您希望在哪里更新旧值?等待_configurationRefresher.tryrefreshaync();当我检查此行中的wait_configurationRefresher时,它会被更新为新值,但var appSettings=_config.Get();在这种情况下_配置仍然具有旧的value@Ekta如果您尝试了官方源代码,但仍然发现问题存在,建议您提交一份官方帮助支持票证。@Ekta好的,看来它解决了您的问题,refresher为null。\u config.Get()
不会反映更改,因为它创建了配置的副本。您可以使用IOptionsMonitor()
创建一个实例,该实例可以注入到DI中,并反映IConfiguration
中的更新。
var test = _settings.AzureFuncTest;