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

Данные из Конфигурации приложений можно загрузить как параметры приложения в .NET Framework. Дополнительные сведения см. в кратком руководстве. Однако, как разработано в .NET Framework, параметры приложения могут обновляться только после перезапуска приложения. Поставщик Конфигурации приложений .NET — это библиотека .NET Standard. Она поддерживает динамическое кэширование и обновление конфигурации без перезапуска приложения. Из этого учебника вы узнаете, как реализовать динамические обновления конфигурации в консольном приложении.NET Framework.

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

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

Необходимые компоненты

Добавление ключа-значения

Добавьте следующее ключевое значение в хранилище Конфигурация приложений и оставьте метку и тип контента со значениями по умолчанию. Дополнительные сведения о добавлении значений ключей в хранилище с помощью портал Azure или ИНТЕРФЕЙСА командной строки см. в разделе "Создание значения ключа".

Ключ Значение
TestApp:Параметры:Message Данные из Конфигурация приложений Azure

Создание консольного приложения .NET Framework

  1. Откройте Visual Studio и выберите Создать проект.

  2. В разделе Создание проекта с помощью фильтра найдите тип проекта Консоль и щелкните Консольное приложение (.NET Framework) с C# из списка шаблонов проекта. Нажмите кнопку Далее.

  3. В окне Настроить новый проект введите имя проекта. В разделе Платформа выберите .NET Framework 4.7.2 или более позднюю версию. Щелкните Создать.

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

  1. Щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet. На вкладке Обзор найдите и добавьте в проект последнюю версию следующих пакетов NuGet.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Откройте файл Program.cs и добавьте следующие пространства имен.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Добавьте две переменные для хранения объектов, связанных с конфигурацией.

    private static IConfiguration _configuration;
    private static IConfigurationRefresher _refresher;
    
  4. Обновите метод Main, чтобы подключиться к Конфигурации приложений с помощью указанных параметров обновления.

    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:`.
                    .Select("TestApp:*")
                    // Configure to reload the key 'TestApp:Settings:Message' if it is modified.
                    .ConfigureRefresh(refresh =>
                    {
                        refresh.Register("TestApp:Settings:Message")
                               .SetCacheExpiration(TimeSpan.FromSeconds(10));
                    });
    
            _refresher = options.GetRefresher();
        });
    
        _configuration = builder.Build();
        PrintMessage().Wait();
    }
    

    В методе ConfigureRefresh для отслеживания изменений регистрируется ключ в хранилище Конфигурации приложений. Метод Register имеет необязательный логический параметр refreshAll, который можно использовать, чтобы указать, следует ли обновлять все значения конфигурации при изменении зарегистрированного ключа. В этом примере будет обновлен только ключ TestApp:Settings:Message. Метод SetCacheExpiration указывает минимальное время, которое должно пройти, прежде чем будет выполнен новый запрос в службу "Конфигурация приложений" для проверки на наличие каких-либо изменений конфигурации. В этом примере с целью демонстрации вы переопределяете срок действия по умолчанию (30 секунд), устанавливая 10-секундный интервал.

  5. Добавьте метод с именем PrintMessage(), который запускает обновление данных конфигурации из Конфигурации приложений.

    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 не приведет к автоматическому обновлению конфигурации. Для активации обновления необходимо вызвать метод TryRefreshAsync из интерфейса IConfigurationRefresher. Это позволяет избежать запросов, отправленных в Конфигурация приложений даже если приложение неактивно. Вы можете включить вызов TryRefreshAsync, в котором вы считаете, что ваше приложение активно. Например, при обработке входящего сообщения, заказа или итерации сложной задачи. Вызовы также могут активироваться по таймеру, если ваше приложение активно все время. В этом примере вы вызываете TryRefreshAsync при нажатии клавиши ВВОД. Обратите внимание, что даже в случае сбоя вызова TryRefreshAsync по какой-либо причине ваше приложение продолжит использовать кэшированную конфигурацию. После завершения настроенного времени истечения срока действия кэша будет предпринята еще одна попытка, после чего вызов TryRefreshAsync будет повторно активирован с помощью действия приложения. Вызов TryRefreshAsync является холостым до завершения заданного времени истечения срока действия кэша, поэтому его влияние на производительность минимальна, даже если вызов совершается часто.

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

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

    При использовании командной строки Windows выполните следующую команду:

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

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

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. Перезапустите Visual Studio, чтобы изменение вступило в силу.

  3. Нажмите клавиши CTRL+F5, чтобы скомпилировать и запустить консольное приложение.

    App launch local

  4. На портале Azure перейдите в обозреватель конфигураций хранилища Конфигурации приложений и обновите значение следующего ключа.

    Ключ Значение
    TestApp:Параметры:Message Данные из Конфигурация приложений Azure — обновлены
  5. Вернувшись в запущенное приложение, нажмите клавишу Enter, чтобы запустить обновление и вывести обновленное значение в окне командной строки или PowerShell.

    App refresh local

    Примечание.

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

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

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

Внимание

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

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

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

Следующие шаги

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

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