Hébergement hors processus avec IIS et ASP.NET Core
Remarque
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 8 de cet article.
Avertissement
Cette version d’ASP.NET Core n’est plus prise en charge. Pour plus d’informations, consultez la Stratégie de prise en charge de .NET et .NET Core. Pour la version actuelle, consultez la version .NET 8 de cet article.
Important
Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.
Pour la version actuelle, consultez la version .NET 8 de cet article.
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 :
- Les requêtes arrivent du web au pilote HTTP.sys en mode noyau.
- 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).
- 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 , le middleware fournit uniquement une identity 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.