Руководство по Использование динамической конфигурации в приложении .NET Core

Клиентская библиотека .NET Core для конфигурации приложений поддерживает конфигурации по запросу без перезапуска приложения. Это можно реализовать, сначала получив экземпляр IConfigurationRefresher из параметров для поставщика конфигурации, а затем вызвав TryRefreshAsync на этом экземпляре, где угодно в коде.

Чтобы поддерживать параметры в актуальном состоянии и избегать слишком большого количества обращений к хранилищу конфигураций, для каждого параметра используется кэш. До истечения срока действия кэшированного значения, операция обновления не выполняет обновление значения, даже если значение изменилось в хранилище конфигураций. Стандартное время истечения для каждого запроса составляет 30 секунд, но при необходимости его можно переопределить.

Из этого руководства вы узнаете, как реализовать динамические обновления конфигурации в коде. При этом в качестве основы используется код приложения, представленный в кратких руководствах. Прежде чем продолжить, ознакомьтесь со статьей Краткое руководство. Создание приложения .NET Core с помощью службы "Конфигурация приложений Azure".

Вы можете выполнять шаги в этом учебнике с помощью любого редактора кода. Visual Studio Code является отличным вариантом, который доступен на платформах Windows, macOS и Linux.

В этом руководстве описано следующее:

  • настройка приложения .NET Core на обновление конфигурации при изменении данных в хранилище службы "Конфигурация приложений";
  • использование последней конфигурации в приложении.

Предварительные требования

Для работы с этим учебником установите пакет SDK для .NET Core.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начать работу.

Перезагрузка данных из App Configuration

Откройте и обновите файл Program.cs, чтобы добавить ссылку на пространство имен System.Threading.Tasks, указать конфигурацию обновления в методе AddAzureAppConfiguration и запустить обновление вручную с помощью метода TryRefreshAsync.

using System;
using System.Threading.Tasks;

namespace TestConsole
{
class Program
{
    private static IConfiguration _configuration = null;
    private static IConfigurationRefresher _refresher = null;

    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    .ConfigureRefresh(refresh =>
                    {
                        refresh.Register("TestApp:Settings:Message")
                               .SetCacheExpiration(TimeSpan.FromSeconds(10));
                    });
                    
                    _refresher = options.GetRefresher();
        });

        _configuration = builder.Build();
        PrintMessage().Wait();
    }

    private static async Task PrintMessage()
    {
        Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");

        // Wait for the user to press Enter
        Console.ReadLine();

        await _refresher.TryRefreshAsync();
        Console.WriteLine(_configuration["TestApp:Settings:Message"] ?? "Hello world!");
    }
}
}

Метод ConfigureRefresh используется, чтобы указать параметры, используемые для обновления данных конфигурации в хранилище службы "Конфигурация приложений" при запуске операции обновления. Экземпляр IConfigurationRefresher можно получить, вызвав метод GetRefresher в параметрах, предоставленных методу AddAzureAppConfiguration, а метод TryRefreshAsync в этом экземпляре можно использовать для запуска операции обновления в любом месте вашего кода.

Примечание

Стандартное время истечения срока действия кэша для параметра конфигурации составляет 30 секунд, но его можно переопределить, вызвав метод SetCacheExpiration в инициализаторе параметров, переданном в качестве аргумента методу ConfigureRefresh.

Создание и запуск приложения локально

  1. Задайте переменную среды с именем ConnectionString и укажите для нее ключ доступа к хранилищу службы "Конфигурация приложений". Если вы используете командную строку Windows, выполните следующую команду и перезапустите командную строку, чтобы изменения вступили в силу:

     setx ConnectionString "connection-string-of-your-app-configuration-store"
    

    Если вы используете Windows PowerShell, выполните следующую команду:

     $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    

    Если вы используете macOS или Linux, выполните следующую команду:

     export ConnectionString='connection-string-of-your-app-configuration-store'
    
  2. Чтобы создать консольное приложение, выполните следующую команду:

     dotnet build
    
  3. Когда создание завершится, запустите приложение локально с помощью следующей команды:

     dotnet run
    

    Краткое руководство. Запуск приложения, размещенного локально

  4. Войдите на портал Azure. Щелкните Все ресурсы и выберите экземпляр хранилища Конфигурации приложений, который вы создали по инструкциям из краткого руководства.

  5. Выберите Configuration Explorer (Обозреватель конфигураций) и измените значения следующих ключей.

    Клавиши Значение
    TestApp:Settings:FontSize Данные из конфигурации приложений Azure. Обновлено
  6. Нажмите клавишу Enter, чтобы запустить обновление и вывести обновленное значение в окне командной строки или PowerShell.

    Краткое руководство. Обновление размещенного локально приложения

    Примечание

    Поскольку время истечения срока действия кэша было установлено равным 10 секундам с использованием метода SetCacheExpiration при указании конфигурации для операции обновления, то значение параметра конфигурации будет обновляться только в том случае, если с момента последнего обновления этого параметра прошло не менее 10 секунд.

Очистка ресурсов

Если вы не планируете в дальнейшем использовать ресурсы, созданные при работе с этой статьей, удалите созданную группу ресурсов, чтобы избежать расходов.

Важно!

Удаление группы ресурсов — процесс необратимый. Группа ресурсов и все содержащиеся в ней ресурсы удаляются без возможности восстановления. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если ресурсы для работы с этой статьей созданы в группе ресурсов, которая содержит другие нужные ресурсы, удалите каждый ресурс отдельно в соответствующей области ресурса, чтобы не удалять группу ресурсов.

  1. Войдите на портал Azure и выберите Группы ресурсов.
  2. Введите имя группы ресурсов в поле Фильтровать по имени.
  3. В списке результатов выберите имя группы ресурсов, чтобы просмотреть общие сведения.
  4. Выберите Удалить группу ресурсов.
  5. Подтвердите операцию удаления группы ресурсов. Введите имя группы ресурсов, которую необходимо удалить, и нажмите Удалить.

Через некоторое время группа ресурсов и все ее ресурсы будут удалены.

Дальнейшие действия

В рамках этого руководства вы включили в приложении .NET Core динамическое обновление параметров конфигурации из службы "Конфигурация приложения". Чтобы узнать, как с помощью удостоверения, управляемого Azure, упростить доступ к службе "Конфигурация приложений Azure", перейдите к следующему учебнику.