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.

Requisitos previos

Creación de un almacén de App Configuration

  1. Para crear un almacén de App Configuration, inicie sesión en Azure Portal. En la esquina superior izquierda de la página principal, seleccione Crear un recurso. En el cuadro Buscar en Marketplace, escriba App Configuration y presione Entrar.

    Buscar App Configuration

  2. Seleccione Configuración de la aplicación en los resultados de la búsqueda y, después, Crear.

    Seleccionar Crear

  3. En el panel Crear de App Configuration, introduzca la siguiente configuración:

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción Seleccione la suscripción de Azure que desee usar para probar App Configuration. Si su cuenta solo tiene una suscripción, se selecciona automáticamente y la lista Suscripción no aparece.
    Grupos de recursos AppConfigTestResources Seleccione o cree un grupo de recursos para el recurso del almacén de App Configuration. Este grupo es útil para organizar los distintos recursos que quiera eliminar al mismo tiempo mediante la eliminación del grupo de recursos. Para más información, consulte Administración de los recursos de Azure a través del Portal.
    Nombre del recurso Nombre único globalmente Escriba un nombre de recurso único para usarlo como recurso de almacén de App Configuration. El nombre debe ser una cadena de entre 5 y 50 caracteres y solo puede contener números, letras y el carácter -. El nombre no puede comenzar ni terminar con el carácter -.
    Ubicación Centro de EE. UU. Use Ubicación para especificar la ubicación geográfica en la que se hospeda el almacén de App Configuration. Para optimizar el rendimiento, cree el recurso en la misma región que los demás componentes de la aplicación.
    Plan de tarifa Gratis Seleccione el plan de tarifa deseado. Para más información, consulte la página de precios de App Configuration.
  4. Seleccione Revisar y crear para validar la configuración.

  5. Seleccione Crear. La implementación puede tardar unos minutos.

  6. Una vez finalizada la implementación, vaya al recurso de App Configuration. Seleccione Configuración > Claves de acceso. Tome nota de la cadena de conexión de la clave de solo lectura principal. Usará esta cadena de conexión más adelante para configurar la aplicación y que se comunique con el almacén de Azure App Configuration que ha creado.

  1. Seleccione Operaciones > Explorador de configuración > Crear > Clave-valor para agregar los siguientes pares clave-valor:

    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

    Deje Etiqueta y Tipo de contenido vacíos.

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:`.
                    .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.

    Inicio local de la aplicación

  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.

    Actualización local de la aplicación

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 desea seguir usando los recursos creados 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 no eliminar 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: