Hébergement hors processus avec IIS et ASP.NET Core

Dans la mesure où les applications ASP.NET Core s’exécutent au sein d’un processus distinct du processus de travail IIS, le module ASP.NET Core prend en charge la gestion des processus. Le module démarre le processus pour l’application ASP.NET Core quand la première requête arrive, et il redémarre l’application si elle s’arrête ou se bloque. Il s’agit essentiellement du même comportement que celui des applications s’exécutant in-process, et qui sont gérées par le service d’activation des processus Windows (WAS).

Le schéma suivant illustre la relation entre IIS, le module ASP.NET Core et une application hébergée hors processus :

ASP.NET Core Module in the out-of-process hosting scenario

  1. Les requêtes arrivent du web au pilote HTTP.sys en mode noyau.
  2. Le pilote route les requêtes vers IIS sur le port configuré du site web. Le port configuré est généralement le port 80 (HTTP) ou le port 443 (HTTPS).
  3. Le module réachemine les requêtes vers Kestrel sur un port aléatoire pour l’application. Le port aléatoire n’est pas 80 ou 443.

Le module ASP.NET Core spécifie le port via une variable d’environnement au démarrage. L’extension UseIISIntegration configure le serveur pour qu’il écoute sur http://localhost:{PORT}. Des vérifications supplémentaires sont effectuées, et les requêtes qui ne proviennent pas du module sont rejetées. Le module ne prend pas en charge le réacheminement HTTPS. Les requêtes sont réacheminées via HTTP même si elles sont reçues par IIS via HTTPS.

Une fois que Kestrel a récupéré la requête en provenance du module, celle-ci est réacheminée vers le pipeline de middleware ASP.NET Core. Le pipeline de middlewares traite la requête et la passe en tant qu’instance de HttpContext à la logique de l’application. Le middleware ajouté par l’intégration d’IIS met à jour le schéma, l’adresse IP distante et la base du chemin pour prendre en compte le réacheminement de la requête vers Kestrel. La réponse de l’application est repassée à IIS, qui la réachemine au client HTTP ayant lancé la requête.

Pour obtenir des conseils d’aide sur la configuration du module ASP.NET Core, consultez Module ASP.NET Core (ANCM) pour IIS.

Pour plus d’informations sur l’hébergement, consultez Héberger dans ASP.NET Core.

Configuration de l’application

Activer les composants IISIntegration

Durant la génération d’un hôte dans CreateHostBuilder (Program.cs), appelez CreateDefaultBuilder pour activer l’intégration d’IIS :

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Pour plus d’informations sur CreateDefaultBuilder, consultez Hôte générique .NET dans ASP.NET Core.

Modèle d’hébergement out-of-process

Pour configurer les options IIS, incluez une configuration de service pour IISOptions dans ConfigureServices. L’exemple suivant empêche l’application d’être renseignée HttpContext.Connection.ClientCertificate :

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Option Default Paramètre
AutomaticAuthentication true Si la valeur est true, le middleware d’intégration IIS définit l’élément HttpContext.User authentifié par Windows Authentication. Si false, l’intergiciel (middleware) fournit uniquement une identité pour HttpContext.User et répond aux questions explicitement posées par AuthenticationScheme. L’authentification Windows doit être activée dans IIS pour que AutomaticAuthentication fonctionne. Pour plus d'informations, consultez la rubrique Authentification Windows.
AuthenticationDisplayName null Définit le nom d’affichage montré aux utilisateurs sur les pages de connexion.
ForwardClientCertificate true Si la valeur est true et que l’en-tête de requête MS-ASPNETCORE-CLIENTCERT est présent, HttpContext.Connection.ClientCertificate est renseigné.

Scénarios avec un serveur proxy et un équilibreur de charge

Le middleware d’intégration d’IIS et le module ASP.NET Core sont configurés pour réacheminer les éléments suivants :

  • Schéma (HTTP/HTTPS).
  • Adresse IP distante d’où provient la requête.

Le middleware d’intégration d’IIS configure le middleware des en-têtes réacheminés.

Une configuration supplémentaire peut être nécessaire pour les applications hébergées derrière des serveurs proxy et des équilibreurs de charge supplémentaires. Pour plus d’informations, consultez l’article Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge.

Modèle d’hébergement out-of-process

Pour configurer une application pour l’hébergement hors processus, définissez la valeur de la propriété <AspNetCoreHostingModel> sur OutOfProcess dans le fichier projet (.csproj) :

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

L’hébergement in-process est défini avec InProcess, qui est la valeur par défaut.

La valeur de <AspNetCoreHostingModel> ne respecte pas la casse, inprocess et outofprocess sont donc des valeurs valides.

Le serveur Kestrel est utilisé à la place du serveur HTTP IIS (IISHttpServer).

Pour le cas hors processus, CreateDefaultBuilder appelle UseIISIntegration pour :

  • Configurer le port et le chemin de base sur lesquels le serveur doit écouter lors de l’exécution derrière le module ASP.NET Core.
  • Configurer l’hôte pour capturer des erreurs de démarrage.

Nom du processus

Process.GetCurrentProcess().ProcessName signale w3wp/iisexpress (in-process) ou dotnet (out-of-process).

De nombreux modules natifs, comme l’authentification Windows, restent actifs. Pour obtenir plus d’informations sur les modules IIS actifs avec le module ASP.NET Core, consultez Modules IIS avec ASP.NET Core.

Le module ASP.NET Core peut également  :

  • Définir des variables d’environnement pour le processus de travail.
  • Journaliser la sortie de stdout dans un stockage de fichiers pour résoudre les problèmes de démarrage.
  • Transférer des jetons d’authentification Windows.