Compartir vía


Tutorial: Uso de la configuración dinámica en un servicio en segundo plano de .NET

Los datos de App Configuration se pueden cargar como Configuración de la aplicación en una aplicación .NET. Para obtener más información, consulte el inicio rápido. Sin embargo, como está diseñado por .NET, 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 de configuración dinámicas en un servicio en segundo plano de .NET.

En este tutorial, aprenderá a:

  • Configure el servicio en segundo plano de .NET para actualizar su configuración en respuesta a los cambios en un almacén de App Configuration.
  • Consuma la configuración más reciente en el servicio en segundo plano.

Requisitos previos

Agregar un par clave-valor

Agregue el siguiente par 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 par clave-valor.

Clave Value
TestApp:Settings:Message Datos de Azure App Configuration

Creación de un servicio en segundo plano de .NET

Use la Interfaz de línea de comandos (CLI) de .NET para crear un nuevo proyecto de aplicación de .NET. La ventaja de usar la CLI de .NET frente a Visual Studio es que está disponible en las plataformas Windows, macOS y Linux. También puede usar las herramientas preinstaladas disponibles en Azure Cloud Shell.

  1. Cree una carpeta nueva para su proyecto.

  2. En la nueva carpeta, ejecute el comando siguiente para crear un nuevo proyecto de servicio en segundo plano de .NET:

    dotnet new worker
    

Recarga de datos de App Configuration

  1. Para agregar referencias al paquete NuGet Microsoft.Extensions.Configuration.AzureAppConfiguration, ejecute el siguiente comando:

    dotnet add package Microsoft.Extensions.Configuration.AzureAppConfiguration
    
  2. Ejecute el siguiente comando para restaurar los paquetes para el proyecto:

    dotnet restore
    
  3. Abra el archivo Program.cs y agregue las siguientes instrucciones:

    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Configuration.AzureAppConfiguration;
    
  4. Conéctese a App Configuration mediante Microsoft Entra ID (recomendado) o una cadena de conexión.

    Use DefaultAzureCredential para autenticarse en el almacén de App Configuration. Siga las instrucciones para asignar la credencial al rol Lector de datos de App Configuration. Asegúrese de dejar tiempo suficiente para que el permiso se propague antes de ejecutar la aplicación.

    // Existing code in Program.cs
    // ... ...
    
    var builder = Host.CreateApplicationBuilder(args);
    
    builder.Configuration.AddAzureAppConfiguration(options =>
    {
        string endpoint = Environment.GetEnvironmentVariable("Endpoint"); 
        options.Connect(new Uri(endpoint), new DefaultAzureCredential());
            // Load all keys that start with `TestApp:`.
            .Select("TestApp:*")
            // Configure to reload the key 'TestApp:Settings:Message' if it is modified.
            .ConfigureRefresh(refreshOptions =>
            {
                refreshOptions.Register("TestApp:Settings:Message");
            });
    
        // Register the refresher so that the Worker service can consume it through DI
        builder.Services.AddSingleton(options.GetRefresher());
    });
    
    // The rest of existing code in Program.cs
    // ... ...
    

    En el método ConfigureRefresh, se registra una clave dentro del almacén de App Configuration para la supervisión de cambios. El método Register tiene un parámetro booleano refreshAll opcional que se puede usar para indicar si se deben actualizar todos los valores de configuración si cambia la clave registrada. En este ejemplo, solo se actualizará la clave TestApp:Settings:Message. Todas las configuraciones registradas para la actualización tienen un tiempo de expiración de la memoria caché predeterminado de 30 segundos antes de que se vuelva a intentar realizar una nueva actualización. Puede actualizarse al llamar al método AzureAppConfigurationRefreshOptions.SetCacheExpiration.

  5. Abra Worker.cs. Inserte IConfiguration y IConfigurationRefresher en el servicio Worker y registre los datos de configuración de App Configuration.

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly IConfiguration _configuration;
        private readonly IConfigurationRefresher _refresher;
    
        public Worker(ILogger<Worker> logger, IConfiguration configuration, IConfigurationRefresher refresher)
        {
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));
            _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            _refresher = refresher ?? throw new ArgumentNullException(nameof(refresher));
        }
    
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                // Intentionally not await TryRefreshAsync to avoid blocking the execution.
                _refresher.TryRefreshAsync(stoppingToken);
    
                if (_logger.IsEnabled(LogLevel.Information))
                {
                    _logger.LogInformation(_configuration["TestApp:Settings:Message"] ?? "No data.");
                }
    
                await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
            }
        }
    }
    

    La llamada al método ConfigureRefresh por sí sola no hará que la configuración se actualice automáticamente. El método TryRefreshAsync se llama desde la interfaz IConfigurationRefresher para desencadenar una actualización. Este diseño es para evitar las solicitudes enviadas a App Configuration incluso cuando la aplicación está inactiva. Puede incluir la llamada a TryRefreshAsync donde considere que la aplicación está activa. Por ejemplo, puede ser cuando se procesa un mensaje entrante, un pedido o una iteración de una tarea compleja. También puede ser en un temporizador si la aplicación está activa todo el tiempo. En este ejemplo, se llama a TryRefreshAsync cada vez que se ejecuta el servicio en segundo plano. Tenga en cuenta que, aunque se produzca 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 pasado el tiempo de expiración de la caché configurada y la actividad de la aplicación vuelva a desencadenar la llamada a TryRefreshAsync. Llamar 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, aunque se llame con frecuencia.

Compilación y ejecución de la aplicación en un entorno local

  1. Establezca una variable de entorno.

    Establezca la variable de entorno denominada Punto de conexión en el punto de conexión del almacén de App Configuration que se encuentra en la Información general del almacén en Azure Portal.

    Si usa el símbolo del sistema de Windows, ejecute el siguiente comando y reinícielo para que se aplique el cambio:

    setx Endpoint "<endpoint-of-your-app-configuration-store>"
    

    Si usa PowerShell, ejecute el siguiente comando:

    $Env:Endpoint = "<endpoint-of-your-app-configuration-store>"
    

    Si usa macOS o Linux, ejecute el siguiente comando:

    export Endpoint='<endpoint-of-your-app-configuration-store>'
    
  2. Ejecute el siguiente comando para crear la aplicación.

    dotnet build
    
  3. Una vez que la compilación se haya realizado correctamente, ejecute el siguiente comando para ejecutar la aplicación localmente.

    dotnet run
    
  4. Debería ver las siguientes salidas en la consola.

    Captura de pantalla del servicio en segundo plano.

  5. En Azure Portal, vaya al Explorador de configuración del almacén de App Configuration y actualice el valor de las claves siguientes.

    Key Value
    TestApp:Settings:Message Datos de Azure App Configuration, actualizados
  6. Espere unos instantes para que pase el período de tiempo del intervalo de actualización. Verá que las salidas de la consola han cambiado.

    Captura de pantalla del servicio en segundo plano actualizado.

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 el servicio en segundo plano de .NET para actualizar dinámicamente las opciones de configuración desde App Configuration. Para obtener información sobre cómo habilitar la configuración dinámica en una aplicación web de ASP.NET, 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: