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


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

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

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

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

Предпосылки

Добавление ключевых значений

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

Ключ Ценность
TestApp:Settings:BackgroundColor Белый
TestApp:Settings:FontColor черный
TestApp:Settings:FontSize 40
TestApp:Settings:Message Данные из Azure App Configuration

Создание веб-приложения ASP.NET

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

  2. Выберите ASP.NET веб-приложение (.NET Framework) с помощью C# из списка шаблонов проекта и нажмите кнопку Далее.

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

  4. В разделе "Создание нового веб-приложения ASP.NET" выберите веб-формы. Нажмите Create.

Повторная загрузка данных из App Configuration

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

    • Microsoft.Extensions.Configuration.AzureAppConfiguration
    • Azure.Identity
  2. Откройте файл Global.asax.cs и добавьте следующие пространства имен.

    using Azure.Identity;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Добавьте в класс следующие статические переменные-члены Global .

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Application_Start Добавьте метод в Global класс. Если метод уже существует, добавьте в него следующий код.

    protected void Application_Start(object sender, EventArgs e)
    {
        ConfigurationBuilder 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(new TimeSpan(0, 5, 0));
                   });
            _configurationRefresher = options.GetRefresher();
        });
    
        Configuration = builder.Build();
    }
    

    Метод Application_Start вызывается при первом запросе к веб-приложению. Он вызывается только один раз во время жизненного цикла приложения. Таким образом, это хорошее место для инициализации IConfiguration объекта и загрузки данных из конфигурации приложений.

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

    Метод SetRefreshInterval задает минимальное время, которое должно пройти до того, как новый запрос будет выполнен в конфигурацию приложений, чтобы проверить наличие изменений конфигурации. В этом примере вы переопределите время окончания срока действия по умолчанию 30 секунд, указав вместо этого время 5 минут. Это уменьшает потенциальное количество запросов, сделанных в хранилище конфигурации приложений.

  5. Application_BeginRequest Добавьте метод в Global класс. Если метод уже существует, добавьте в него следующий код.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        _ = _configurationRefresher.TryRefreshAsync();
    }
    

    Вызов метода ConfigureRefresh сам по себе не приведет к автоматическому обновлению конфигурации. Вы вызываете метод TryRefreshAsync в начале каждого запроса, чтобы сигнализировать об обновлении. Эта конструкция гарантирует, что приложение отправляет запросы только в конфигурацию приложений при активном получении запросов.

    Вызов TryRefreshAsync — это no-op до истечения заданного интервала обновления, поэтому его влияние на производительность минимально. Когда отправляется запрос в App Configuration, так как вы не ожидаете завершения задачи, конфигурация обновляется асинхронно, не блокируя выполнение текущего запроса. Текущий запрос может не получить обновленные значения конфигурации, но последующие запросы будут выполняться.

    Если вызов TryRefreshAsync завершается сбоем по какой-либо причине, приложение продолжит использовать кэшированную конфигурацию. Еще одна попытка будет выполнена, когда настроенный интервал обновления прошел снова, и TryRefreshAsync вызов активируется новым запросом к приложению.

Использование последних данных конфигурации

  1. Откройте Default.aspx и замените его содержимое следующим разметкой. Убедитесь, что атрибут Наследует соответствует пространству имен и имени класса приложения.

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebFormApp.Default" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Azure App Configuration Web Forms Demo</title>
    </head>
    <body id="body" runat="server">
        <form id="form1" runat="server">
            <div style="text-align: center">
                <asp:Label ID="message" runat="server" />
            </div>
        </form>
    </body>
    </html>
    
  2. Откройте Default.aspx.cs и обновите его с помощью следующего кода.

    using System;
    using System.Web.UI.WebControls;
    
    namespace WebFormApp
    {
        public partial class Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                // Read configuration from the IConfiguration object loaded from Azure App Configuration
                string messageText = Global.Configuration["TestApp:Settings:Message"] ?? "Please add the key \"TestApp:Settings:Message\" in your Azure App Configuration store.";
                string messageFontSize = Global.Configuration["TestApp:Settings:FontSize"] ?? "20";
                string messageFontColor = Global.Configuration["TestApp:Settings:FontColor"] ?? "Black";
                string backgroundColor = Global.Configuration["TestApp:Settings:BackgroundColor"] ?? "White";
    
                message.Text = messageText;
                message.Font.Size = FontUnit.Point(int.Parse(messageFontSize));
                message.ForeColor = System.Drawing.Color.FromName(messageFontColor);
                body.Attributes["bgcolor"] = backgroundColor;
            }
        }
    }
    

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

  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:BackgroundColor Зеленый
    TestApp:Settings:FontColor LightGray
    TestApp:Settings:Message Данные из конфигурации приложений Azure — теперь с динамическими обновлениями!
  5. Обновите страницу браузера, чтобы просмотреть новые параметры конфигурации. Возможно, потребуется обновить несколько раз, чтобы изменения отображались или изменили интервал обновления менее чем на 5 минут.

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

Замечание

Пример кода, используемого в этом руководстве, можно скачать из репозитория GitHub конфигурации приложений Azure.

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

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

Это важно

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

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

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

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

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

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