Esercitazione: Usare la configurazione dinamica in un'applicazione Web ASP.NET (.NET Framework)

I dati di Configurazione app possono essere caricati come impostazioni app in un'applicazione .NET Framework. Per altre informazioni, vedere la guida introduttiva. Tuttavia, come è progettato da .NET Framework, le impostazioni dell'app possono essere aggiornate solo al riavvio dell'applicazione. Il provider Configurazione app .NET è una libreria .NET Standard. Supporta la memorizzazione nella cache e l'aggiornamento dinamico della configurazione senza riavvio dell'applicazione. Questa esercitazione illustra come implementare gli aggiornamenti dinamici della configurazione in un'applicazione Web Forms ASP.NET. La stessa tecnica si applica alle applicazioni MVC di .NET Framework.

In questa esercitazione verranno illustrate le procedure per:

  • Configurare l'applicazione Web ASP.NET per aggiornarne la configurazione in risposta alle modifiche in un archivio Configurazione app.
  • Inserire la configurazione più recente nelle richieste all'applicazione.

Prerequisiti

Aggiungere i valori chiave

Aggiungere i valori chiave seguenti all'archivio Configurazione app e lasciare Etichetta e Tipo di contenuto con i valori predefiniti. Per altre informazioni su come aggiungere valori chiave a un archivio usando il portale di Azure o l'interfaccia della riga di comando, passare a Crea un valore chiave.

Chiave Valore
TestApp:Settings:BackgroundColor White
TestApp:Settings:FontColor Nero
TestApp:Settings:FontSize 40
TestApp:Settings:Message Dati di Configurazione app di Azure
TestApp:Settings:Sentinel v1

Creare un'applicazione Web ASP.NET

  1. Avviare Visual Studio e selezionare Crea un nuovo progetto.

  2. Selezionare ASP.NET applicazione Web (.NET Framework) con C# dall'elenco dei modelli di progetto e premere Avanti.

  3. In Configura il nuovo progetto immettere un nome di progetto. In Framework selezionare .NET Framework 4.7.2 o versione successiva. Fare clic su Crea.

  4. In Crea una nuova applicazione Web ASP.NET selezionare Web Forms. Fare clic su Crea.

Ricaricare i dati di Configurazione app

  1. Fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet. Nella scheda Sfoglia cercare e aggiungere la versione più recente del pacchetto NuGet seguente al progetto.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Aprire il file Global.asax.cs e aggiungere gli spazi dei nomi seguenti.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Aggiungere le variabili membro statiche seguenti alla Global classe.

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Aggiungere un Application_Start metodo alla Global classe. Se il metodo esiste già, aggiungere il codice seguente.

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

    Il Application_Start metodo viene chiamato alla prima richiesta all'applicazione Web. Viene chiamato una sola volta durante il ciclo di vita dell'applicazione. Come questo è un buon posto per inizializzare l'oggetto IConfiguration e caricare i dati da Configurazione app.

    Nel metodo viene registrata una chiave all'interno dell'archivio ConfigureRefresh Configurazione app per il monitoraggio delle modifiche. Il refreshAll parametro del Register metodo indica che tutti i valori di configurazione devono essere aggiornati se la chiave registrata cambia. In questo esempio, la chiave TestApp:Settings:Sentinel è una chiave sentinel che si aggiorna dopo aver completato la modifica di tutte le altre chiavi. Quando viene rilevata una modifica, l'applicazione aggiorna tutti i valori di configurazione. Questo approccio consente di garantire la coerenza della configurazione nell'applicazione rispetto al monitoraggio di tutte le chiavi per le modifiche.

    Il SetCacheExpiration metodo specifica il tempo minimo che deve essere trascorso prima che venga effettuata una nuova richiesta a Configurazione app per verificare eventuali modifiche di configurazione. In questo esempio si esegue l'override dell'ora di scadenza predefinita di 30 secondi, specificando invece un tempo di 5 minuti. Riduce il numero potenziale di richieste effettuate nell'archivio Configurazione app.

  5. Aggiungere un Application_BeginRequest metodo alla Global classe. Se il metodo esiste già, aggiungere il codice seguente.

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

    ConfigureRefresh La chiamata al metodo da solo non causerà l'aggiornamento automatico della configurazione. Si chiama il metodo all'inizio TryRefreshAsync di ogni richiesta per segnalare un aggiornamento. Questa progettazione garantisce che l'applicazione invii solo richieste a Configurazione app quando riceve attivamente le richieste.

    La chiamata TryRefreshAsync è no-op prima dell'intervallo di scadenza della cache configurata, pertanto l'impatto sulle prestazioni è minimo. Quando viene effettuata una richiesta per Configurazione app, poiché non si attende l'attività, la configurazione viene aggiornata in modo asincrono senza bloccare l'esecuzione della richiesta corrente. La richiesta corrente potrebbe non ottenere i valori di configurazione aggiornati, ma le richieste successive verranno eseguite.

    Se la chiamata TryRefreshAsync ha esito negativo per qualsiasi motivo, l'applicazione continuerà a usare la configurazione memorizzata nella cache. Un altro tentativo verrà eseguito quando l'ora di scadenza della cache configurata è passata di nuovo e la TryRefreshAsync chiamata viene attivata da una nuova richiesta all'applicazione.

Usare i dati di configurazione più recenti

  1. Aprire Default.aspx e sostituirlo con il markup seguente. Assicurarsi che l'attributo Eredita corrisponda allo spazio dei nomi e al nome della classe dell'applicazione.

    <%@ 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. Aprire Default.aspx.cs e aggiornarlo con il codice seguente.

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

Compilare ed eseguire l'applicazione

  1. Impostare una variabile di ambiente denominata ConnectionString sulla stringa di connessione di sola lettura ottenuta durante la creazione dell'archivio Configurazione app.

    Se si usa il prompt dei comandi di Windows, eseguire il comando seguente:

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

    Se si usa Windows PowerShell, eseguire il comando seguente:

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. Riavviare Visual Studio per rendere effettiva la modifica.

  3. Premere CTRL + F5 per compilare ed eseguire l'applicazione Web.

    Avvio dell'app in locale

  4. Nella portale di Azure passare a Esplora configurazione dell'archivio Configurazione app e aggiornare il valore delle chiavi seguenti. Ricordarsi di aggiornare la chiave sentinel TestApp:Settings:Sentinel per ultima.

    Chiave Valore
    TestApp:Settings:BackgroundColor Green
    TestApp:Settings:FontColor Lightgray
    TestApp:Settings:Message Dati di Configurazione app di Azure - ora con aggiornamenti dinamici
    TestApp:Settings:Sentinel v2
  5. Aggiornare la pagina del browser per visualizzare le nuove impostazioni di configurazione. Potrebbe essere necessario aggiornare più volte per le modifiche da riflettere o modificare l'ora di scadenza della cache in meno di 5 minuti.

    Aggiornamento dell'app in locale

Nota

È possibile scaricare il codice di esempio usato in questa esercitazione dal repository GitHub Configurazione app di Azure.

Pulire le risorse

Se non si vuole continuare a usare le risorse create in questo articolo, eliminare il gruppo di risorse creato qui per evitare addebiti.

Importante

L'eliminazione di un gruppo di risorse è irreversibile. Il gruppo di risorse e tutte le risorse in esso contenute vengono eliminati in modo permanente. Assicurarsi di non eliminare accidentalmente il gruppo di risorse o le risorse sbagliate. Se le risorse per questo articolo sono state create in un gruppo di risorse che contiene altre risorse che si vogliono mantenere, eliminare ogni risorsa singolarmente dal rispettivo riquadro anziché eliminare il gruppo di risorse.

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.
  2. Nella casella Filtra per nome immettere il nome del gruppo di risorse.
  3. Nell'elenco dei risultati selezionare il nome del gruppo di risorse per visualizzare una panoramica.
  4. Selezionare Elimina gruppo di risorse.
  5. Verrà chiesto di confermare l'eliminazione del gruppo di risorse. Immettere il nome del gruppo di risorse per confermare e selezionare Elimina.

Dopo qualche istante, il gruppo di risorse e tutte le risorse che contiene vengono eliminati.

Passaggi successivi

In questa esercitazione è stata abilitata l'applicazione Web Forms ASP.NET per aggiornare dinamicamente le impostazioni di configurazione da Configurazione app. Per informazioni su come abilitare la configurazione dinamica in un'app .NET Framework, passare all'esercitazione successiva:

Per informazioni su come usare un'identità gestita di Azure per semplificare l'accesso a Configurazione app, continuare con l'esercitazione successiva: