C# Azure应用程序配置在Azure函数运行时未更新

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

我正在使用azure应用程序配置和azure功能

因此,我从azure应用程序配置中提取所有关键值。但是如果azure函数正在运行,并且如果我从azure应用程序配置中对键值进行了任何更改,azure func将不会显示更新后的值

下面是我已经实现的代码

在startup.cs中

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;