Поделиться через


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

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

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

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

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

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

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

Ключ Значение
TestApp:Settings: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
    • Azure.Identity
  2. Откройте файл Program.cs и добавьте следующие пространства имен.

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

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

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

    // Existing code in Program.cs
    // ... ...
    
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
            options.Connect(new Uri(endpoint), new DefaultAzureCredential())
                   // Load all keys that start with `TestApp:` and have no label.
                   .Select("TestApp:*")
                   // Reload configuration if any selected key-values have changed.
                   .ConfigureRefresh(refresh =>
                   {
                       refresh.RegisterAll()
                              .SetRefreshInterval(TimeSpan.FromSeconds(10));
                   });
    
            _refresher = options.GetRefresher();
        });
    
        _configuration = builder.Build();
        PrintMessage().Wait();
    }
    
    // The rest of existing code in Program.cs
    // ... ...
    

    Внутри метода ConfigureRefresh вы вызываете метод RegisterAll, чтобы указать поставщику App Configuration перезагрузить всю конфигурацию при обнаружении изменений в любом из выбранных ключевых значений (начиная с TestApp: и без ярлыка). Дополнительные сведения об изменениях конфигурации мониторинга см. в рекомендациях по обновлению конфигурации.

    Метод SetRefreshInterval указывает минимальное время, которое должно пройти, прежде чем будет выполнен новый запрос в службу "Конфигурация приложений" для проверки на наличие каких-либо изменений конфигурации. В этом примере с целью демонстрации вы переопределяете срок действия по умолчанию (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 — это no-op до истечения заданного интервала обновления, поэтому его влияние на производительность минимально, даже если оно часто вызывается.

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

  1. Задайте переменную среды.

    Задайте переменную среды с именем Endpoint, указывающую на конечную точку вашего хранилища конфигурации приложений, которое можно найти в разделе Обзор на портале Azure.

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

    setx Endpoint "<endpoint-of-your-app-configuration-store>"
    

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

    $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
    

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

    export Endpoint='<endpoint-of-your-app-configuration-store>'
    
  2. Перезапустите Visual Studio, чтобы изменение вступило в силу.

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

    Локальный запуск приложения

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

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

    Локальное обновление приложения

    Примечание.

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

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

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

Внимание

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

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

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

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

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

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