Kestrel : changements de configuration au moment de l’exécution détectés par défaut

Kestrel réagit désormais aux changements apportés à la section Kestrel de l’instanceIConfiguration du projet (par exemple, appsettings.json) au moment de l’exécution. Pour en savoir plus sur la configuration de Kestrel à l’aide de appsettings.json, consultez l’exemple appsettings.json dans Configuration du point de terminaison.

Kestrel lie, dissocie et relie les points de terminaison si nécessaire pour réagir à ces changements de configuration.

Pour plus d’informations, consultez le problème dotnet/aspnetcore#22807.

Version introduite

5.0 Préversion 7

Ancien comportement

Avant ASP.NET Core 5.0 Préversion 6, Kestrel ne prenait pas en charge le changement de la configuration au moment de l’exécution.

Dans ASP.NET Core 5.0 Préversion 6, vous pouvez choisir le comportement par défaut de réaction aux changements de configuration au moment de l’exécution. Acceptation de la configuration de liaison Kestrel requise manuellement :

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;

public class Program
{
    public static void Main(string[] args) =>
        CreateHostBuilder(args).Build().Run();

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseKestrel((builderContext, kestrelOptions) =>
                {
                    kestrelOptions.Configure(
                        builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: true);
                });

                webBuilder.UseStartup<Startup>();
            });
}

Nouveau comportement

Kestrel réagit aux changements de configuration au moment de l’exécution par défaut. Pour prendre en charge ce changement, ConfigureWebHostDefaults appelle KestrelServerOptions.Configure(IConfiguration, bool) avec reloadOnChange: true par défaut.

Raison du changement

Le changement a été apporté pour prendre en charge la reconfiguration du point de terminaison au moment de l’exécution sans redémarrer complètement le serveur. Contrairement au redémarrage complet du serveur, les points de terminaison inchangés ne sont pas liés, même temporairement.

  • Pour la plupart des scénarios dans lesquels la section de configuration par défaut de Kestrel ne change pas au moment de l’exécution, ce changement n’a aucun impact et aucune action n’est nécessaire.

  • Pour les scénarios dans lesquels la section de configuration par défaut de Kestrel change au moment de l’exécution et Kestrel doit y réagir, il s’agit maintenant du comportement par défaut.

  • Pour les scénarios dans lesquels la section de configuration par défaut de Kestrel change au moment de l’exécution et où Kestrel ne doit pas y réagir, vous pouvez refuser comme suit :

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    public class Program
    {
        public static void Main(string[] args) =>
            CreateHostBuilder(args).Build().Run();
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseKestrel((builderContext, kestrelOptions) =>
                    {
                        kestrelOptions.Configure(
                            builderContext.Configuration.GetSection("Kestrel"), reloadOnChange: false);
                    });
    
                    webBuilder.UseStartup<Startup>();
                });
    }
    

Remarques :

Ce changement ne modifie pas le comportement de la surcharge KestrelServerOptions.Configure(IConfiguration), qui est toujours le comportement reloadOnChange: false par défaut.

Il est également important de vérifier que la source de configuration prend en charge le rechargement. Pour les sources JSON, le rechargement est configuré en appelant AddJsonFile(path, reloadOnChange: true). Le rechargement est déjà configuré par défaut pour appsettings.json et appsettings.{ Environment}.json.

API affectées

GenericHostBuilderExtensions.ConfigureWebHostDefaults