Tutorial: Utilizar a configuração dinâmica numa aplicação Web ASP.NET (.NET Framework)

Os dados de App Configuration podem ser carregados como Definições da Aplicação numa aplicação .NET Framework. Para obter mais informações, veja o início rápido. No entanto, tal como foi concebido pela .NET Framework, as Definições da Aplicação só podem ser atualizadas após o reinício da aplicação. O fornecedor de App Configuration .NET é uma biblioteca .NET Standard. Suporta a colocação em cache e a atualização dinâmica da configuração sem reinício da aplicação. Este tutorial mostra como pode implementar atualizações de configuração dinâmicas numa aplicação ASP.NET Web Forms. A mesma técnica aplica-se a .NET Framework aplicações MVC.

Neste tutorial, ficará a saber como:

  • Configure a sua aplicação Web ASP.NET para atualizar a respetiva configuração em resposta a alterações num arquivo de App Configuration.
  • Injete a configuração mais recente nos pedidos para a sua aplicação.

Pré-requisitos

Adicionar valores-chave

Adicione os seguintes valores-chave ao arquivo App Configuration e deixe Etiqueta e Tipo de Conteúdo com os respetivos valores predefinidos. Para obter mais informações sobre como adicionar valores-chave a um arquivo com o portal do Azure ou a CLI, aceda a Criar um valor-chave.

Chave Valor
TestApp:Settings:BackgroundColor Branco
TestApp:Settings:FontColor Negra
TestApp:Settings:FontSize 40
TestApp:Settings:Message Dados de Azure App Configuration
TestApp:Settings:Sentinel v1

Criar uma Aplicação Web ASP.NET

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

  2. Selecione ASP.NET Aplicação Web (.NET Framework) com C# na lista de modelos de projeto e prima Seguinte.

  3. Em Configurar o novo projeto, introduza um nome de projeto. Em Framework, selecione .NET Framework 4.7.2 ou superior. Prima Criar.

  4. Em Criar uma nova Aplicação Web ASP.NET, selecione Web Forms. Prima Criar.

Recarregar dados do App Configuration

  1. Clique com o botão direito do rato no projeto e selecione Gerir Pacotes NuGet. No separador Procurar , procure e adicione a versão mais recente do seguinte pacote NuGet ao seu projeto.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Abra o ficheiro Global.asax.cs e adicione os seguintes espaços de nomes.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Adicione as seguintes variáveis de membro estático à Global classe .

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

    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 Application_Start método é chamado no primeiro pedido à sua aplicação Web. É chamado apenas uma vez durante o ciclo de vida da aplicação. Como tal, é um bom local para inicializar o objeto IConfiguration e carregar dados de App Configuration.

    ConfigureRefresh No método , é registada uma chave no arquivo de App Configuration para monitorização de alterações. O refreshAll parâmetro para o Register método indica que todos os valores de configuração devem ser atualizados se a chave registada for alterada. Neste exemplo, a chave TestApp:Settings:Sentinel é uma chave sentinela que atualiza depois de concluir a alteração de todas as outras chaves. Quando é detetada uma alteração, a aplicação atualiza todos os valores de configuração. Esta abordagem ajuda a garantir a consistência da configuração na sua aplicação em comparação com a monitorização de todas as chaves para alterações.

    O SetCacheExpiration método especifica o tempo mínimo que tem de ser decorrido antes de ser feito um novo pedido para App Configuration para verificar se existem alterações de configuração. Neste exemplo, substitui o tempo de expiração predefinido de 30 segundos, especificando antes um tempo de 5 minutos. Reduz o número potencial de pedidos feitos ao seu arquivo de App Configuration.

  5. Adicione um Application_BeginRequest método à Global classe . Se o método já existir, adicione o seguinte código ao mesmo.

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

    Chamar o ConfigureRefresh método por si só não fará com que a configuração seja atualizada automaticamente. Chama o TryRefreshAsync método no início de cada pedido para sinalizar uma atualização. Este design garante que a sua aplicação só envia pedidos para App Configuration quando está a receber ativamente pedidos.

    A chamada TryRefreshAsync não é executada antes de decorrido o tempo de expiração da cache configurada, pelo que o impacto no desempenho é mínimo. Quando é feito um pedido para App Configuration, uma vez que não aguarda a tarefa, a configuração é atualizada de forma assíncrona sem bloquear a execução do pedido atual. O pedido atual pode não obter os valores de configuração atualizados, mas os pedidos subsequentes irão fazê-lo.

    Se a chamada TryRefreshAsync falhar por algum motivo, a aplicação continuará a utilizar a configuração em cache. Será efetuada outra tentativa quando o tempo de expiração da cache configurada tiver passado novamente e a TryRefreshAsync chamada for acionada por um novo pedido para a sua aplicação.

Utilizar os dados de configuração mais recentes

  1. Abra Default.aspx e substitua o respetivo conteúdo pela seguinte marcação. Certifique-se de que o atributo Herda corresponde ao espaço de nomes e ao nome da classe da sua aplicação.

    <%@ 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 seguinte código.

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

Compilar e executar a aplicação

  1. Defina uma variável de ambiente denominada ConnectionString para a cadeia de ligação de chave só de leitura obtida durante a criação do arquivo App Configuration.

    Se utilizar a linha de comandos do Windows, execute o seguinte comando:

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

    Se utilizar Windows PowerShell, execute o seguinte comando:

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

  3. Prima Ctrl + F5 para criar e executar a aplicação Web.

    Iniciação de aplicações local

  4. No portal do Azure, navegue para o Explorador de configuração do seu arquivo de App Configuration e atualize o valor das seguintes chaves. Lembre-se de atualizar finalmente a chave do Sentinel TestApp:Settings:Sentinel .

    Chave Valor
    TestApp:Settings:BackgroundColor Green
    TestApp:Settings:FontColor ClaroGray
    TestApp:Settings:Message Dados de Azure App Configuration - agora com atualizações em direto!
    TestApp:Settings:Sentinel v2
  5. Atualize a página do browser para ver as novas definições de configuração. Poderá ter de atualizar mais do que uma vez para que as alterações sejam refletidas ou alterar o tempo de expiração da cache para menos de 5 minutos.

    Atualização da aplicação local

Nota

Pode transferir o código de exemplo utilizado neste tutorial a partir do repositório Azure App Configuration GitHub.

Limpar os recursos

Se não quiser continuar a utilizar os recursos criados neste artigo, elimine o grupo de recursos que criou aqui para evitar custos.

Importante

A eliminação de um grupo de recursos é irreversível. O grupo de recursos e todos os recursos nele contidos são eliminados permanentemente. Certifique-se de que não elimina acidentalmente os recursos ou o grupo de recursos errados. Se criou os recursos para este artigo dentro de um grupo de recursos que contém outros recursos que pretende manter, elimine cada recurso individualmente do respetivo painel em vez de eliminar o grupo de recursos.

  1. Inicie sessão no portal do Azure e selecione Grupos de recursos.
  2. Na caixa Filtrar por nome , introduza o nome do grupo de recursos.
  3. Na lista de resultados, selecione o nome do grupo de recursos para ver uma descrição geral.
  4. Selecione Eliminar grupo de recursos.
  5. É-lhe pedido que confirme a eliminação do grupo de recursos. Introduza o nome do grupo de recursos a confirmar e selecione Eliminar.

Após alguns momentos, o grupo de recursos e todos os recursos são eliminados.

Passos seguintes

Neste tutorial, ativou a sua aplicação ASP.NET Web Forms para atualizar dinamicamente as definições de configuração a partir de App Configuration. Para saber como ativar a configuração dinâmica numa aplicação .NET Framework, avance para o próximo tutorial:

Para saber como utilizar uma identidade gerida do Azure para simplificar o acesso ao App Configuration, avance para o próximo tutorial: