Share via


Tutorial: usar a configuração dinâmica em um aplicativo Web ASP.NET (.NET Framework)

Os dados da Configuração de Aplicativos podem ser carregados como Configurações de Aplicativo em um aplicativo do .NET Framework. Para obter mais informações, confira o Início Rápido. No entanto, como são projetadas pelo .NET Framework, as Configurações do Aplicativo podem ser atualizadas somente após a reinicialização do aplicativo. O provedor .NET da Configuração de Aplicativos é uma biblioteca .NET Standard. Ele dá suporte ao cache e à atualização da configuração dinamicamente, sem reinicialização do aplicativo. Este tutorial mostra como você pode implementar atualizações de configuração dinâmica em um aplicativo ASP.NET Web Forms. A mesma técnica se aplica a aplicativos MVC do .NET Framework.

Neste tutorial, você aprenderá como:

  • Configurar seu aplicativo Web ASP.NET para atualizar a configuração em resposta a alterações em um repositório de Configuração de Aplicativos.
  • Injete a configuração mais recente em solicitações para o aplicativo.

Pré-requisitos

Adicionar valores-chave

Adicione os seguintes valores-chave ao repositório de Configuração de Aplicativos e deixe o Rótulo e Tipo de Conteúdo com seus valores padrão. Para mais informações sobre como adicionar valores-chave a um repositório usando o portal do Azure ou a CLI, acesse Criar um valor-chave.

Chave Valor
TestApp:Settings:BackgroundColor Branca
TestApp:Settings:FontColor Preto
TestApp:Settings:FontSize 40
TestApp:Settings:Message Dados da Configuração de Aplicativo do Azure
TestApp:Settings:Sentinel v1

Criar um aplicativo Web ASP.NET

  1. Inicie o Visual Studio e selecione Criar um projeto.

  2. Selecione Aplicativo Web ASP.NET (.NET Framework) com C# na lista de modelos de projeto e pressione Avançar.

  3. Em Configurar seu novo projeto, insira um nome de projeto. Em Framework, selecione .NET Framework 4.7.2 ou superior. Pressione Criar.

  4. Em Criar um aplicativo Web ASP.NET, selecione Web Forms. Pressione Criar.

Recarregar os dados da Configuração de Aplicativo

  1. Clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet. Na guia Procurar, pesquise e adicione a versão mais recente dos pacotes NuGet a seguir ao projeto.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Abra o arquivo Global.asax.cs e adicione os namespaces a seguir.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Adicione as variáveis estáticas de membro a seguir à classe Global.

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Adicione um método Application_Start à classe Global. Se o método já existir, adicione o código a seguir a ele.

    protected void Application_Start(object sender, EventArgs e)
    {
        ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(Environment.GetEnvironmentVariable("ConnectionString"))
                    // Load all keys that start with `TestApp:` and have no label.
                    .Select("TestApp:*")
                    // Configure to reload configuration if the registered key 'TestApp:Settings:Sentinel' is modified.
                    .ConfigureRefresh(refresh => 
                    {
                        refresh.Register("TestApp:Settings:Sentinel", refreshAll:true)
                               .SetCacheExpiration(new TimeSpan(0, 5, 0));
                    });
            _configurationRefresher = options.GetRefresher();
        });
    
        Configuration = builder.Build();
    }
    

    O método Application_Start é chamado na primeira solicitação para seu aplicativo Web. Ele é chamado apenas uma vez durante o ciclo de vida do aplicativo. Como tal, é um bom lugar para inicializar seu objeto e IConfiguration e carregar dados da Configuração de Aplicativos.

    No método ConfigureRefresh, uma chave em seu repositório de Configuração de Aplicativos é registrada para monitoramento de alterações. O parâmetro refreshAll para o método Register indica que todos os valores de configuração deverão ser atualizados se a chave registrada for alterada. Neste exemplo, a chave TestApp:Settings:Sentinel é uma chave sentinela que você atualiza após concluir a alteração de todas as outras chaves. Quando uma alteração é detectada, o aplicativo atualiza todos os valores de configuração. Essa abordagem ajuda a garantir a consistência da configuração em seu aplicativo em comparação com o monitoramento de todas as chaves quanto a alterações.

    O método SetCacheExpiration especifica o tempo mínimo para fazer uma nova solicitação à Configuração de Aplicativos para verificar se há alterações de configuração. Neste exemplo, você substitui o tempo de término padrão de 30 segundos especificando um tempo de cinco minutos. Isso reduz o possível número de solicitações feitas ao repositório de Configuração de Aplicativos.

  5. Adicione um método Application_BeginRequest à classe Global. Se o método já existir, adicione o código a seguir a ele.

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

    Chamar o método ConfigureRefresh sozinho não fará com que a configuração seja atualizada automaticamente. Você chama o método TryRefreshAsync no início de cada solicitação para sinalizar uma atualização. Esse design garante que seu aplicativo só envie solicitações para a Configuração de Aplicativos quando ele estiver recebendo solicitações ativamente.

    Chamar TryRefreshAsync é uma não operação antes que o tempo de expiração do cache configurado decorra, portanto, seu impacto no desempenho é mínimo. Quando uma solicitação é feita à Configuração de Aplicativos, pois você não aguarda a tarefa, a configuração é atualizada de maneira assíncrona, sem bloquear a execução da solicitação atual. Talvez a solicitação atual não receba os valores de configuração atualizados, mas as solicitações seguintes receberão.

    Se a chamada TryRefreshAsync falhar por algum motivo, seu aplicativo continuará a usar a configuração armazenada em cache. Outra tentativa será feita quando o tempo de expiração do cache configurado tiver passado novamente, e a chamada TryRefreshAsync for disparada por uma nova solicitação para o aplicativo.

Usar os dados de configuração mais recentes

  1. Abra o arquivo Default.aspx e substitua o conteúdo dele pelo markup a seguir. Verifique se o atributo Inherits corresponde ao namespace e ao nome de classe do seu aplicativo.

    <%@ 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. Abra Default.aspx.cs e atualize-o com o código a seguir.

    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;
            }
        }
    }
    

Compile e execute o aplicativo

  1. Defina uma variável de ambiente chamada ConnectionString como a cadeia de conexão de chave somente leitura obtida durante a criação do repositório de Configuração de Aplicativos.

    Se você usar o prompt de comando do Windows, execute o seguinte comando:

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

    Se você usa o Windows PowerShell, execute o comando a seguir:

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. Reinicie o Visual Studio para permitir que a alteração tenha efeito.

  3. Pressione Ctrl+F5 para compilar e executar o aplicativo Web.

    App launch local

  4. No portal do Azure, navegue até o Explorador de configuração do seu repositório de Configuração de Aplicativos e atualize o valor das chaves a seguir. Lembre-se de atualizar a chave sentinela TestApp:Settings:Sentinel.

    Chave Valor
    TestApp:Settings:BackgroundColor Verde
    TestApp:Settings:FontColor LightGray
    TestApp:Settings:Message Dados da Configuração de Aplicativo do Azure – agora com atualizações dinâmicas!
    TestApp:Settings:Sentinel v2
  5. Atualize a página do navegador para ver as novas definições de configuração. Talvez seja necessário atualizá-la mais de uma vez para que as alterações sejam refletidas ou alterar o tempo de término do cache para menos de cinco minutos.

    App refresh local

Observação

O código de exemplo usado neste tutorial pode ser baixado do repositório do GitHub da Configuração de Aplicativos do Azure.

Limpar os recursos

Se não deseja continuar usando os recursos criados neste artigo, exclua o grupo de recursos que você criou aqui para evitar encargos.

Importante

A exclusão de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos contidos nele são excluídos permanentemente. Não exclua acidentalmente grupo de recursos ou recursos incorretos. Se tiver criado os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que você deseja manter, exclua cada um individualmente do respectivo painel em vez de excluir o grupo de recursos.

  1. Entre no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome..., digite o nome do seu grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para conferir uma visão geral.
  4. Selecione Excluir grupo de recursos.
  5. Você receberá uma solicitação para confirmar a exclusão do grupo de recursos. Insira o nome do grupo de recursos para confirmar e selecione Excluir.

Após alguns instantes, o grupo de recursos e todos os recursos dele são excluídos.

Próximas etapas

Neste tutorial, você habilitou seu aplicativo ASP.NET Web Forms para atualizar dinamicamente as configurações da Configuração de Aplicativos. Para saber como habilitar a configuração dinâmica em um aplicativo do .NET Framework, prossiga para o próximo tutorial:

Para aprender a usar uma identidade gerenciada pelo Azure para simplificar o acesso à Configuração de Aplicativos, prossiga para o próximo tutorial: