Tutorial: Uso de la configuración dinámica en una aplicación web ASP.NET (.NET Framework)

Los datos de App Configuration pueden cargarse como configuración de aplicación en una aplicación de .NET Framework. Para obtener más información, consulte el inicio rápido. Sin embargo, según el diseño de .NET Framework, la configuración de la aplicación solo se puede actualizar tras el reinicio de la aplicación. El proveedor .NET de App Configuration es una biblioteca .NET Standard. Admite el almacenamiento en caché y la actualización dinámica de la configuración sin reiniciar la aplicación. En este tutorial se muestra cómo puede implementar actualizaciones dinámicas de configuración en una aplicación ASP.NET Web Forms. Esta misma técnica se aplica a las aplicaciones MVC de .NET Framework.

En este tutorial aprenderá a:

  • Configurar la aplicación web ASP.NET para actualizar su configuración como respuesta a los cambios en un almacén de App Configuration.
  • Insertar la configuración más reciente en las solicitudes a la aplicación.

Prerrequisitos

Agregar pares de clave-valor

Agregue los siguientes pares clave-valor al almacén de App Configuration y deje Etiqueta y Tipo de contenido con sus valores predeterminados. Para obtener más información sobre cómo agregar pares clave-valor a un almacén mediante Azure Portal o la CLI, vaya a Creación de un valor de clave.

Clave Value
TestApp:Settings:BackgroundColor Blanco
TestApp:Settings:FontColor Negro
TestApp:Settings:FontSize 40
TestApp:Settings:Message Datos de Azure App Configuration
TestApp:Settings:Sentinel v1

Creación de una aplicación web ASP.NET

  1. Inicie Visual Studio y seleccione Crear un proyecto.

  2. Seleccione Aplicación web ASP.NET (.NET Framework) con C# en la lista de plantillas de proyecto y presione Siguiente.

  3. En Configurar el nuevo proyecto, asígnele al proyecto un nombre. En Marco, seleccione .NET Framework 4.7.2 o una versión posterior. Pulse Crear.

  4. En Crear una aplicación web ASP.NET, seleccione Web Forms. Pulse Crear.

Recarga de datos de App Configuration

  1. Haga clic con el botón derecho en el proyecto y seleccione Administrar paquetes NuGet. En la pestaña Examinar, busque y agregue la versión más reciente del siguiente paquete NuGet al proyecto.

    Microsoft.Extensions.Configuration.AzureAppConfiguration

  2. Abra el archivo Global.asax.cs y agregue los siguientes espacios de nombres.

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  3. Agregue las siguientes variables miembro estáticas a la clase Global.

    public static IConfiguration Configuration;
    private static IConfigurationRefresher _configurationRefresher;
    
  4. Agregue un método Application_Start a la clase Global. Si el método ya existe, agréguele el código siguiente.

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

    Se llama al método Application_Start en la primera solicitud a la aplicación web. Solo se le llama una vez durante el ciclo de vida de la aplicación. Por lo tanto, es un buen lugar para inicializar el objeto IConfiguration y cargar datos desde App Configuration.

    En el método ConfigureRefresh, se registra una clave dentro del almacén de App Configuration para la supervisión de cambios. El parámetro refreshAll del método Register indica que se deben actualizar todos los valores de configuración si cambia la clave registrada. En este ejemplo, la clave TestApp:Settings:Sentinel es una clave de Sentinel especial que se actualiza después de completar el cambio de todas las demás claves. Cuando se detecta un cambio, la aplicación actualiza todos los valores de configuración. Este enfoque ayuda a garantizar la coherencia de la configuración en la aplicación en comparación con la supervisión de todos los cambios en todas las claves.

    El método SetCacheExpiration especifica el tiempo mínimo que debe transcurrir antes de que se realice una nueva solicitud a App Configuration para comprobar si hay cambios de configuración. En este ejemplo, se reemplaza el tiempo de expiración predeterminado de 30 segundos y se especifica un tiempo de 5 minutos en su lugar. Esto reduce el número posible de solicitudes realizadas al almacén de App Configuration.

  5. Agregue un método Application_BeginRequest a la clase Global. Si el método ya existe, agréguele el código siguiente.

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

    La llamada al método ConfigureRefresh por sí sola no hará que la configuración se actualice automáticamente. Para indicar una actualización, se llama al método TryRefreshAsync al principio de cada solicitud. Este diseño garantiza que la aplicación solo envía solicitudes a App Configuration cuando está activamente recibiendo solicitudes.

    La llamada a TryRefreshAsync es una operación sin efecto antes de que pase el tiempo de expiración de la caché configurada, por lo que su impacto en el rendimiento es mínimo. Cuando se realiza una solicitud a App Configuration, como no se espera en la tarea, la configuración se actualiza de forma asincrónica sin bloquear la ejecución de la solicitud actual. Es posible que la solicitud actual no obtenga los valores de configuración actualizados, pero sí lo harán las solicitudes posteriores.

    Si se produce un error en la llamada a TryRefreshAsync por cualquier motivo, la aplicación seguirá usando la configuración almacenada en caché. Se realizará otro intento cuando haya vuelto a pasar el tiempo de expiración de la caché configurada y una nueva solicitud a la aplicación vuelva a desencadenar la llamada a TryRefreshAsync.

Uso de los datos de configuración más recientes

  1. Abra Default.aspx y reemplace su contenido por el marcado siguiente. Asegúrese de que el atributo Inherits coincide con el espacio de nombres y el nombre de clase de la aplicación.

    <%@ 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 y actualícelo con el código siguiente.

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

Compilación y ejecución de la aplicación

  1. Establezca una variable de entorno llamada ConnectionString en la cadena de conexión de solo lectura obtenida durante la creación del almacén de App Configuration.

    Si usa el símbolo del sistema de Windows, ejecute el siguiente comando:

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

    Si usa Windows PowerShell, ejecute el siguiente comando:

    $Env:ConnectionString = "connection-string-of-your-app-configuration-store"
    
  2. Reinicie Visual Studio para permitir que el cambio surta efecto.

  3. Presione Ctrl + F5 para compilar y ejecutar la aplicación web.

    App launch local

  4. En Azure Portal, vaya al Explorador de configuración del almacén de App Configuration y actualice el valor de las claves siguientes. No olvide actualizar la clave de Sentinel TestApp:Settings:Sentinel al final.

    Clave Value
    TestApp:Settings:BackgroundColor Verde
    TestApp:Settings:FontColor LightGray
    TestApp:Settings:Message Datos de Azure App Configuration: ahora con actualizaciones directas
    TestApp:Settings:Sentinel v2
  5. Actualice la página del explorador para ver los nuevos valores de configuración. Es posible que necesite actualizar el explorador más de una vez para que se reflejen los cambios o que tenga que cambiar el tiempo de expiración de la caché para que sea inferior a 5 minutos.

    App refresh local

Nota:

Puede descargar el código de ejemplo que se usa en este tutorial del repositorio de GitHub de Azure App Configuration.

Limpieza de recursos

Si no quiere seguir usando los recursos que se han creado en este artículo, elimine el grupo de recursos que creó aquí para evitar cargos.

Importante

La eliminación de un grupo de recursos es irreversible. El grupo de recursos y todos los recursos que contiene se eliminan permanentemente. Asegúrese de que no elimina por accidente el grupo de recursos o los recursos equivocados. Si creó los recursos para este artículo en un grupo de recursos que contenga los recursos que desee conservar, elimine cada recurso de forma individual desde su panel respectivo, en lugar de eliminar el grupo de recursos.

  1. Inicie sesión en Azure Portal y después seleccione Grupos de recursos.
  2. En el cuadro de texto Filtrar por nombre, escriba el nombre del grupo de recursos.
  3. En la lista resultados, seleccione el nombre del grupo de recursos para ver la información general.
  4. Seleccione Eliminar grupo de recursos.
  5. Se le pedirá que confirme la eliminación del grupo de recursos. Escriba el nombre del grupo de recursos para confirmar y seleccione Eliminar.

Transcurridos unos instantes, el grupo de recursos y todos sus recursos se eliminan.

Pasos siguientes

En este tutorial, ha habilitado la aplicación ASP.NET Web Forms para actualizar dinámicamente los valores de configuración desde App Configuration. Para obtener información sobre cómo habilitar la configuración dinámica en una aplicación de .NET Framework, continúe con el siguiente tutorial:

Para aprender a usar una identidad administrada de Azure para simplificar el acceso a App Configuration, vaya al siguiente tutorial: