Module ASP.NET CoreASP.NET Core Module

Par Nowak, Rick Strahl, Chris Ross, Rick Anderson, Sourabh Shirhatti, Justin Kotalik et Luke LathamBy Tom Dykstra, Rick Strahl, Chris Ross, Rick Anderson, Sourabh Shirhatti, Justin Kotalik, and Luke Latham

Le module ASP.NET Core est un module IIS natif qui se connecte dans le pipeline IIS pour effectuer l’une des opérations suivantes :The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline to either:

Versions Windows prises en charge :Supported Windows versions:

  • Windows 7 ou version ultérieureWindows 7 or later
  • Windows Server 2008 R2 ou une version ultérieureWindows Server 2008 R2 or later

Lors de l’hébergement in-process, le module utilise une implémentation du serveur in-process pour IIS, nommée serveur HTTP IIS (IISHttpServer).When hosting in-process, the module uses an in-process server implementation for IIS, called IIS HTTP Server (IISHttpServer).

Lors de l’hébergement out-of-process, le module fonctionne uniquement avec Kestrel.When hosting out-of-process, the module only works with Kestrel. Le module n’est pas compatible avec HTTP.sys.The module is incompatible with HTTP.sys.

Modèles d'hébergementHosting models

Modèle d’hébergement in-processIn-process hosting model

Pour configurer l’hébergement in-process dans une application, ajoutez la propriété <AspNetCoreHostingModel> au fichier projet de l’application en lui attribuant la valeur InProcess (l’hébergement out-of-process est défini sur OutOfProcess) :To configure an app for in-process hosting, add the <AspNetCoreHostingModel> property to the app's project file with a value of InProcess (out-of-process hosting is set with OutOfProcess):

<PropertyGroup>
  <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>

Le modèle d’hébergement in-process n’est pas pris en charge pour les applications ASP.NET Core qui ciblent le .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

Si la propriété <AspNetCoreHostingModel> n’est pas présente dans le fichier, la valeur par défaut est OutOfProcess.If the <AspNetCoreHostingModel> property isn't present in the file, the default value is OutOfProcess.

Les caractéristiques suivantes s’appliquent lors de l’hébergement in-process :The following characteristics apply when hosting in-process:

  • Le serveur HTTP IIS (IISHttpServer) est utilisé à la place du serveur Kestrel.IIS HTTP Server (IISHttpServer) is used instead of Kestrel server. Pour in-process, CreateDefaultBuilder appelle UseIIS pour :For in-process, CreateDefaultBuilder calls UseIIS to:

    • Enregistrer IISHttpServer.Register the IISHttpServer.
    • 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.Configure the port and base path the server should listen on when running behind the ASP.NET Core Module.
    • Configurer l’hôte pour capturer des erreurs de démarrage.Configure the host to capture startup errors.
  • L’attribut requestTimeout ne s’applique pas à l’hébergement in-process.The requestTimeout attribute doesn't apply to in-process hosting.

  • Le partage d’un pool d’applications entre les applications n’est pas pris en charge.Sharing an app pool among apps isn't supported. Utilisez un pool d’applications par application.Use one app pool per app.

  • Lorsque vous utilisez Web Deploy ou que vous placez manuellement un fichier app_offline.htm dans le déploiement, l’application peut ne pas s’arrêter immédiatement si une connexion est ouverte.When using Web Deploy or manually placing an app_offline.htm file in the deployment, the app might not shut down immediately if there's an open connection. Par exemple, une connexion websocket peut retarder l’arrêt de l’application.For example, a websocket connection may delay app shut down.

  • L’architecture (nombre de bits) de l’application et le runtime installé (x64 ou x86) doivent correspondre à l’architecture du pool d’applications.The architecture (bitness) of the app and installed runtime (x64 or x86) must match the architecture of the app pool.

  • Si vous configurez manuellement l’hôte de l’application avec WebHostBuilder (et non CreateDefaultBuilder), et que l’application est exécutée directement sur le serveur Kestrel (auto-hébergée), appelez UseKestrel avant d’appeler UseIISIntegration.If setting up the app's host manually with WebHostBuilder (not using CreateDefaultBuilder) and the app is ever run directly on the Kestrel server (self-hosted), call UseKestrel before calling UseIISIntegration. Si l’ordre est inversé, l’hôte ne parvient pas à démarrer.If the order is reversed, the host fails to start.

  • Les déconnexions du client sont détectées.Client disconnects are detected. Le jeton d’annulation HttpContext.RequestAborted est annulé quand le client se déconnecte.The HttpContext.RequestAborted cancellation token is cancelled when the client disconnects.

  • Dans ASP.NET Core version 2.2.1 ou antérieure, GetCurrentDirectory retourne le répertoire de travail du processus démarré par IIS, et non le répertoire de l’application (par exemple, C:\Windows\System32\inetsrv pour w3wp.exe).In ASP.NET Core 2.2.1 or earlier, GetCurrentDirectory returns the worker directory of the process started by IIS rather than the app's directory (for example, C:\Windows\System32\inetsrv for w3wp.exe).

    Pour connaître l’exemple de code qui définit le répertoire actuel de l’application, consultez CurrentDirectoryHelpers, classe.For sample code that sets the app's current directory, see the CurrentDirectoryHelpers class. Appelez la méthode SetCurrentDirectory.Call the SetCurrentDirectory method. Les appels suivants à GetCurrentDirectory fournissent le répertoire de l’application.Subsequent calls to GetCurrentDirectory provide the app's directory.

  • Dans le cas d’un hébergement in-process, AuthenticateAsync n’est pas appelé en interne pour initialiser un utilisateur.When hosting in-process, AuthenticateAsync isn't called internally to initialize a user. Par conséquent, une implémentation de IClaimsTransformation utilisée pour transformer les revendications après chaque authentification n’est pas activée par défaut.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. Si vous transformez les revendications avec une implémentation de IClaimsTransformation, appelez AddAuthentication pour ajouter des services d’authentification :When transforming claims with an IClaimsTransformation implementation, call AddAuthentication to add authentication services:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
        services.AddAuthentication(IISServerDefaults.AuthenticationScheme);
    }
    
    public void Configure(IApplicationBuilder app)
    {
        app.UseAuthentication();
    }
    

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

Pour configurer une application pour un hébergement out-of-process, utilisez l’une des approches suivantes dans le fichier de projet :To configure an app for out-of-process hosting, use either of the following approaches in the project file:

  • Ne spécifiez pas la propriété <AspNetCoreHostingModel>.Don't specify the <AspNetCoreHostingModel> property. Si la propriété <AspNetCoreHostingModel> n’est pas présente dans le fichier, la valeur par défaut est OutOfProcess.If the <AspNetCoreHostingModel> property isn't present in the file, the default value is OutOfProcess.
  • Définissez la valeur de la propriété <AspNetCoreHostingModel> sur OutOfProcess (l’hébergement in-process est défini avec InProcess) :Set the value of the <AspNetCoreHostingModel> property to OutOfProcess (in-process hosting is set with InProcess):
<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Le serveur Kestrel est utilisé à la place du serveur HTTP IIS (IISHttpServer).Kestrel server is used instead of IIS HTTP Server (IISHttpServer).

Pour out-of-process, CreateDefaultBuilder appelle UseIISIntegration pour :For out-of-process, CreateDefaultBuilder calls UseIISIntegration to:

  • 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.Configure the port and base path the server should listen on when running behind the ASP.NET Core Module.
  • Configurer l’hôte pour capturer des erreurs de démarrage.Configure the host to capture startup errors.

Dans le cas d’un hébergement out-of-process, AuthenticateAsync n’est pas appelé en interne pour initialiser un utilisateur.When hosting out-of-process, AuthenticateAsync isn't called internally to initialize a user. Par conséquent, une implémentation de IClaimsTransformation utilisée pour transformer les revendications après chaque authentification n’est pas activée par défaut.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. Si vous transformez les revendications avec une implémentation de IClaimsTransformation, appelez AddAuthentication pour ajouter des services d’authentification :When transforming claims with an IClaimsTransformation implementation, call AddAuthentication to add authentication services:

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IClaimsTransformation, ClaimsTransformer>();
    services.AddAuthentication(IISDefaults.AuthenticationScheme);
}

public void Configure(IApplicationBuilder app)
{
    app.UseAuthentication();
}

Modifications du modèle d’hébergementHosting model changes

Si le paramètre hostingModel est modifié dans le fichier web.config (comme expliqué dans la section Configuration avec web.config), le module recycle le processus de travail pour IIS.If the hostingModel setting is changed in the web.config file (explained in the Configuration with web.config section), the module recycles the worker process for IIS.

Pour IIS Express, le module ne recycle pas le processus de travail, mais déclenche plutôt un arrêt approprié du processus IIS Express en cours.For IIS Express, the module doesn't recycle the worker process but instead triggers a graceful shutdown of the current IIS Express process. La requête suivante à l’application génère un nouveau processus IIS Express.The next request to the app spawns a new IIS Express process.

Nom du processusProcess name

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

Le module ASP.NET Core est un module IIS natif qui se connecte dans le pipeline IIS pour transférer les requêtes web aux applications ASP.NET Core du back-end.The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline to forward web requests to backend ASP.NET Core apps.

Versions Windows prises en charge :Supported Windows versions:

  • Windows 7 ou version ultérieureWindows 7 or later
  • Windows Server 2008 R2 ou une version ultérieureWindows Server 2008 R2 or later

Le module fonctionne seulement avec Kestrel.The module only works with Kestrel. Le module n’est pas compatible avec HTTP.sys.The module is incompatible with HTTP.sys.

Étant donné que les applications ASP.NET Core s’exécutent dans un processus distinct du processus de travail IIS, le module traite également la gestion des processus.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module also handles process management. Le module démarre le processus de l’application ASP.NET Core quand la première requête arrive et redémarre l’application si elle plante.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it crashes. Il s’agit essentiellement du même comportement que celui des applications ASP.NET 4.x qui s’exécutent in-process dans IIS et sont gérées par le service WAS (Windows Activation Service).This is essentially the same behavior as seen with ASP.NET 4.x apps that run in-process in IIS that are managed by the Windows Process Activation Service (WAS).

Le schéma suivant illustre la relation entre IIS, le module ASP.NET Core et une application :The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app:

Module ASP.NET Core

Les requêtes arrivent du web au pilote HTTP.sys en mode noyau.Requests arrive from the web to the kernel-mode HTTP.sys driver. Le pilote route les requêtes vers IIS sur le port configuré du site web, généralement 80 (HTTP) ou 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Le module transfère les requêtes à Kestrel sur un port aléatoire pour l’application, qui n’est ni le port 80 ni le port 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Le module spécifie le port via une variable d’environnement au démarrage, et le middleware d’intégration IIS configure le serveur pour qu’il écoute sur http://localhost:{port}.The module specifies the port via an environment variable at startup, and the IIS Integration Middleware configures the server to listen on http://localhost:{port}. Des vérifications supplémentaires sont effectuées, et les requêtes qui ne proviennent pas du module sont rejetées.Additional checks are performed, and requests that don't originate from the module are rejected. Le module ne prend pas en charge le transfert HTTPS : les requêtes sont donc transférées via HTTP, même si IIS les reçoit via HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Dès que Kestrel sélectionne la requête dans le module, celle-ci est envoyée (push) dans le pipeline de middlewares d’ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. Le pipeline de middlewares traite la requête et la passe en tant qu’instance de HttpContext à la logique de l’application.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. 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 transfert de la requête à Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La réponse de l’application est ensuite repassée à IIS, qui la renvoie au client HTTP à l’origine de la requête.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

De nombreux modules natifs, comme l’authentification Windows, restent actifs.Many native modules, such as Windows Authentication, remain active. Pour obtenir plus d’informations sur les modules IIS actifs avec le module ASP.NET Core, consultez Modules IIS avec ASP.NET Core.To learn more about IIS modules active with the ASP.NET Core Module, see Modules IIS avec ASP.NET Core.

Le module ASP.NET Core peut également  :The ASP.NET Core Module can also:

  • Définir des variables d’environnement pour le processus de travail.Set environment variables for the worker process.
  • Journaliser la sortie de stdout dans un stockage de fichiers pour résoudre les problèmes de démarrage.Log stdout output to file storage for troubleshooting startup issues.
  • Transférer des jetons d’authentification Windows.Forward Windows authentication tokens.

Comment installer et utiliser le module ASP.NET CoreHow to install and use the ASP.NET Core Module

Pour obtenir des instructions sur l’installation du module ASP.NET Core, consultez Installer le bundle d’hébergement .NET Core.For instructions on how to install the ASP.NET Core Module, see Install the .NET Core Hosting Bundle.

Configuration avec web.configConfiguration with web.config

Le module ASP.NET Core est configuré avec la section aspNetCore du nœud system.webServer dans le fichier web.config du site.The ASP.NET Core Module is configured with the aspNetCore section of the system.webServer node in the site's web.config file.

Le fichier web.config suivant est publié pour un déploiement dépendant du framework et configure le module ASP.NET Core pour gérer les demandes du site :The following web.config file is published for a framework-dependent deployment and configures the ASP.NET Core Module to handle site requests:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\MyApp.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet"
                arguments=".\MyApp.dll"
                stdoutLogEnabled="false"
                stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Le fichier web.config suivant est publié pour un déploiement autonome :The following web.config is published for a self-contained deployment:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>

La propriété InheritInChildApplications est définie sur false pour indiquer que les paramètres spécifiés dans l’élément <emplacement> ne sont pas hérités par les applications qui se trouvent dans un sous-répertoire de l’application.The InheritInChildApplications property is set to false to indicate that the settings specified within the <location> element aren't inherited by apps that reside in a subdirectory of the app.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApp.exe"
                stdoutLogEnabled="false"
                stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Lorsqu’une application est déployée sur Azure App Service, le chemin d’accès stdoutLogFile est défini sur \\?\%home%\LogFiles\stdout.When an app is deployed to Azure App Service, the stdoutLogFile path is set to \\?\%home%\LogFiles\stdout. Le chemin d’accès enregistre les journaux stdout dans le dossier LogFiles, un emplacement automatiquement créé par le service.The path saves stdout logs to the LogFiles folder, which is a location automatically created by the service.

Pour plus d’informations sur la configuration d’une sous-application IIS, consultez Héberger ASP.NET Core sur Windows avec IIS.For information on IIS sub-application configuration, see Héberger ASP.NET Core sur Windows avec IIS.

Attributs de l’élément aspNetCoreAttributes of the aspNetCore element

AttributAttribute DescriptionDescription Par défautDefault
arguments

Attribut de chaîne facultatif.Optional string attribute.

Arguments pour l’exécutable spécifié dans processPath.Arguments to the executable specified in processPath.

disableStartUpErrorPage

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, la page 502.5 - Échec du processus est supprimée, et la page de code d’état 502 configurée dans le fichier web.config est prioritaire.If true, the 502.5 - Process Failure page is suppressed, and the 502 status code page configured in the web.config takes precedence.

false
forwardWindowsAuthToken

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, le jeton est transmis au processus enfant qui écoute sur %ASPNETCORE_PORT% sous la forme d’un en-tête 'MS-ASPNETCORE-WINAUTHTOKEN' par demande.If true, the token is forwarded to the child process listening on %ASPNETCORE_PORT% as a header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. Il incombe à ce processus d’appeler CloseHandle sur ce jeton par demande.It's the responsibility of that process to call CloseHandle on this token per request.

true
hostingModel

Attribut de chaîne facultatif.Optional string attribute.

Spécifie le modèle d’hébergement comme étant in-process (InProcess) ou out-of-process (OutOfProcess).Specifies the hosting model as in-process (InProcess) or out-of-process (OutOfProcess).

OutOfProcess
processesPerApplication

Attribut entier facultatif.Optional integer attribute.

Spécifie le nombre d’instances du processus indiqué dans le paramètre processPath qui peuvent être lancées par application.Specifies the number of instances of the process specified in the processPath setting that can be spun up per app.

†Pour l’hébergement in-process, la valeur est limitée à 1.†For in-process hosting, the value is limited to 1.

Il est déconseillé de définir processesPerApplication.Setting processesPerApplication is discouraged. Cet attribut sera supprimé dans une version ultérieure.This attribute will be removed in a future release.

Par défaut : 1Default: 1
Min : 1Min: 1
Max : 100Max: 100
processPath

Attribut de chaîne requis.Required string attribute.

Chemin d’accès au fichier exécutable lançant un processus d’écoute des requêtes HTTP.Path to the executable that launches a process listening for HTTP requests. Les chemins d’accès relatifs sont pris en charge.Relative paths are supported. Si le chemin d’accès commence par ., il est considéré comme étant relatif par rapport à la racine du site.If the path begins with ., the path is considered to be relative to the site root.

rapidFailsPerMinute

Attribut entier facultatif.Optional integer attribute.

Indique le nombre de fois où le processus spécifié dans processPath est autorisé à se bloquer par minute.Specifies the number of times the process specified in processPath is allowed to crash per minute. Si cette limite est dépassée, le module arrête le lancement du processus pour le reste de la minute.If this limit is exceeded, the module stops launching the process for the remainder of the minute.

Non pris en charge avec hébergement in-process.Not supported with in-process hosting.

Par défaut : 10Default: 10
Min : 0Min: 0
Max : 100Max: 100
requestTimeout

Attribut timespan facultatif.Optional timespan attribute.

Spécifie la durée pendant laquelle le module ASP.NET Core attend une réponse de la part du processus à l’écoute sur %ASPNETCORE_PORT%.Specifies the duration for which the ASP.NET Core Module waits for a response from the process listening on %ASPNETCORE_PORT%.

Dans les versions du module ASP.NET Core fournies avec ASP.NET Core 2.1 ou version ultérieure, la valeur requestTimeout est spécifiée en heures, minutes et secondes.In versions of the ASP.NET Core Module that shipped with the release of ASP.NET Core 2.1 or later, the requestTimeout is specified in hours, minutes, and seconds.

Ne s’applique pas à l’hébergement in-process.Doesn't apply to in-process hosting. Pour l’hébergement in-process, le module attend que l’application traite la requête.For in-process hosting, the module waits for the app to process the request.

Les valeurs valides pour les segments de minutes et secondes de la chaîne sont dans la plage de 0 à 59.Valid values for minutes and seconds segments of the string are in the range 0-59. L’utilisation de 60 dans la valeur de minutes ou de secondes affiche 500 - Erreur interne du serveur.Use of 60 in the value for minutes or seconds results in a 500 - Internal Server Error.

Par défaut : 00:02:00Default: 00:02:00
Min : 00:00:00Min: 00:00:00
Max : 360:00:00Max: 360:00:00
shutdownTimeLimit

Attribut entier facultatif.Optional integer attribute.

Durée en secondes pendant laquelle le module attend que l’exécutable s’arrête normalement lorsque le fichier app_offline.htm est détecté.Duration in seconds that the module waits for the executable to gracefully shutdown when the app_offline.htm file is detected.

Par défaut : 10Default: 10
Min : 0Min: 0
Max : 600Max: 600
startupTimeLimit

Attribut entier facultatif.Optional integer attribute.

Durée en secondes pendant laquelle le module attend que le fichier exécutable démarre un processus à l’écoute sur le port.Duration in seconds that the module waits for the executable to start a process listening on the port. Si cette limite de temps est dépassée, le module met fin au processus.If this time limit is exceeded, the module kills the process. Le module tente de relancer le processus lorsqu’il reçoit une nouvelle requête, puis continue d’essayer de redémarrer le processus pour les requêtes entrantes suivantes, sauf si l’application ne démarre pas rapidFailsPerMinute un certain nombre de fois au cours de la dernière minute.The module attempts to relaunch the process when it receives a new request and continues to attempt to restart the process on subsequent incoming requests unless the app fails to start rapidFailsPerMinute number of times in the last rolling minute.

La valeur 0 (zéro) n’est pas considérée comme un délai infini.A value of 0 (zero) is not considered an infinite timeout.

Par défaut : 120Default: 120
Min : 0Min: 0
Max : 3600Max: 3600
stdoutLogEnabled

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, les attributs stdout et stderr du processus spécifié dans processPath sont redirigés vers le fichier spécifié dans stdoutLogFile.If true, stdout and stderr for the process specified in processPath are redirected to the file specified in stdoutLogFile.

false
stdoutLogFile

Attribut de chaîne facultatif.Optional string attribute.

Spécifie le chemin d’accès relatif ou absolu pour lequel les attributs stdout et stderr du processus spécifié dans processPath sont consignés.Specifies the relative or absolute file path for which stdout and stderr from the process specified in processPath are logged. Les chemins d’accès relatifs sont relatifs par rapport à la racine du site.Relative paths are relative to the root of the site. Tout chemin d’accès commençant par . est relatif par rapport à la racine du site et tous les autres chemins d’accès sont traités comme des chemins d’accès absolus.Any path starting with . are relative to the site root and all other paths are treated as absolute paths. Tous les dossiers fournis dans le chemin sont créés par le module au moment de la création du fichier journal.Any folders provided in the path are created by the module when the log file is created. Si vous utilisez des délimiteurs de trait de soulignement, un horodatage, un ID de processus et une extension de fichier ( .log) sont ajoutés au dernier segment du chemin d'accès stdoutLogFile.Using underscore delimiters, a timestamp, process ID, and file extension (.log) are added to the last segment of the stdoutLogFile path. Si .\logs\stdout est fourni en tant que valeur, un exemple de journal stdout est enregistré en tant que stdout_20180205194132_1934.log dans le dossier journaux avec un enregistrement effectué le 05/02/2018 à 19:41:32 et un ID de processus de 1934.If .\logs\stdout is supplied as a value, an example stdout log is saved as stdout_20180205194132_1934.log in the logs folder when saved on 2/5/2018 at 19:41:32 with a process ID of 1934.

aspnetcore-stdout
AttributAttribute DescriptionDescription Par défautDefault
arguments

Attribut de chaîne facultatif.Optional string attribute.

Arguments pour l’exécutable spécifié dans processPath.Arguments to the executable specified in processPath.

disableStartUpErrorPage

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, la page 502.5 - Échec du processus est supprimée, et la page de code d’état 502 configurée dans le fichier web.config est prioritaire.If true, the 502.5 - Process Failure page is suppressed, and the 502 status code page configured in the web.config takes precedence.

false
forwardWindowsAuthToken

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, le jeton est transmis au processus enfant qui écoute sur %ASPNETCORE_PORT% sous la forme d’un en-tête 'MS-ASPNETCORE-WINAUTHTOKEN' par demande.If true, the token is forwarded to the child process listening on %ASPNETCORE_PORT% as a header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. Il incombe à ce processus d’appeler CloseHandle sur ce jeton par demande.It's the responsibility of that process to call CloseHandle on this token per request.

true
processesPerApplication

Attribut entier facultatif.Optional integer attribute.

Spécifie le nombre d’instances du processus indiqué dans le paramètre processPath qui peuvent être lancées par application.Specifies the number of instances of the process specified in the processPath setting that can be spun up per app.

Il est déconseillé de définir processesPerApplication.Setting processesPerApplication is discouraged. Cet attribut sera supprimé dans une version ultérieure.This attribute will be removed in a future release.

Par défaut : 1Default: 1
Min : 1Min: 1
Max : 100Max: 100
processPath

Attribut de chaîne requis.Required string attribute.

Chemin d’accès au fichier exécutable lançant un processus d’écoute des requêtes HTTP.Path to the executable that launches a process listening for HTTP requests. Les chemins d’accès relatifs sont pris en charge.Relative paths are supported. Si le chemin d’accès commence par ., il est considéré comme étant relatif par rapport à la racine du site.If the path begins with ., the path is considered to be relative to the site root.

rapidFailsPerMinute

Attribut entier facultatif.Optional integer attribute.

Indique le nombre de fois où le processus spécifié dans processPath est autorisé à se bloquer par minute.Specifies the number of times the process specified in processPath is allowed to crash per minute. Si cette limite est dépassée, le module arrête le lancement du processus pour le reste de la minute.If this limit is exceeded, the module stops launching the process for the remainder of the minute.

Par défaut : 10Default: 10
Min : 0Min: 0
Max : 100Max: 100
requestTimeout

Attribut timespan facultatif.Optional timespan attribute.

Spécifie la durée pendant laquelle le module ASP.NET Core attend une réponse de la part du processus à l’écoute sur %ASPNETCORE_PORT%.Specifies the duration for which the ASP.NET Core Module waits for a response from the process listening on %ASPNETCORE_PORT%.

Dans les versions du module ASP.NET Core fournies avec ASP.NET Core 2.1 ou version ultérieure, la valeur requestTimeout est spécifiée en heures, minutes et secondes.In versions of the ASP.NET Core Module that shipped with the release of ASP.NET Core 2.1 or later, the requestTimeout is specified in hours, minutes, and seconds.

Par défaut : 00:02:00Default: 00:02:00
Min : 00:00:00Min: 00:00:00
Max : 360:00:00Max: 360:00:00
shutdownTimeLimit

Attribut entier facultatif.Optional integer attribute.

Durée en secondes pendant laquelle le module attend que l’exécutable s’arrête normalement lorsque le fichier app_offline.htm est détecté.Duration in seconds that the module waits for the executable to gracefully shutdown when the app_offline.htm file is detected.

Par défaut : 10Default: 10
Min : 0Min: 0
Max : 600Max: 600
startupTimeLimit

Attribut entier facultatif.Optional integer attribute.

Durée en secondes pendant laquelle le module attend que le fichier exécutable démarre un processus à l’écoute sur le port.Duration in seconds that the module waits for the executable to start a process listening on the port. Si cette limite de temps est dépassée, le module met fin au processus.If this time limit is exceeded, the module kills the process. Le module tente de relancer le processus lorsqu’il reçoit une nouvelle requête, puis continue d’essayer de redémarrer le processus pour les requêtes entrantes suivantes, sauf si l’application ne démarre pas rapidFailsPerMinute un certain nombre de fois au cours de la dernière minute.The module attempts to relaunch the process when it receives a new request and continues to attempt to restart the process on subsequent incoming requests unless the app fails to start rapidFailsPerMinute number of times in the last rolling minute.

La valeur 0 (zéro) n’est pas considérée comme un délai infini.A value of 0 (zero) is not considered an infinite timeout.

Par défaut : 120Default: 120
Min : 0Min: 0
Max : 3600Max: 3600
stdoutLogEnabled

Attribut booléen facultatif.Optional Boolean attribute.

Si la valeur est true, les attributs stdout et stderr du processus spécifié dans processPath sont redirigés vers le fichier spécifié dans stdoutLogFile.If true, stdout and stderr for the process specified in processPath are redirected to the file specified in stdoutLogFile.

false
stdoutLogFile

Attribut de chaîne facultatif.Optional string attribute.

Spécifie le chemin d’accès relatif ou absolu pour lequel les attributs stdout et stderr du processus spécifié dans processPath sont consignés.Specifies the relative or absolute file path for which stdout and stderr from the process specified in processPath are logged. Les chemins d’accès relatifs sont relatifs par rapport à la racine du site.Relative paths are relative to the root of the site. Tout chemin d’accès commençant par . est relatif par rapport à la racine du site et tous les autres chemins d’accès sont traités comme des chemins d’accès absolus.Any path starting with . are relative to the site root and all other paths are treated as absolute paths. Tous les dossiers spécifiés dans le chemin d’accès doivent exister pour permettre au module de créer le fichier journal.Any folders provided in the path must exist in order for the module to create the log file. Si vous utilisez des délimiteurs de trait de soulignement, un horodatage, un ID de processus et une extension de fichier ( .log) sont ajoutés au dernier segment du chemin d'accès stdoutLogFile.Using underscore delimiters, a timestamp, process ID, and file extension (.log) are added to the last segment of the stdoutLogFile path. Si .\logs\stdout est fourni en tant que valeur, un exemple de journal stdout est enregistré en tant que stdout_20180205194132_1934.log dans le dossier journaux avec un enregistrement effectué le 05/02/2018 à 19:41:32 et un ID de processus de 1934.If .\logs\stdout is supplied as a value, an example stdout log is saved as stdout_20180205194132_1934.log in the logs folder when saved on 2/5/2018 at 19:41:32 with a process ID of 1934.

aspnetcore-stdout

Définition des variables d'environnementSetting environment variables

Des variables d’environnement peuvent être spécifiées pour le processus dans l’attribut processPath.Environment variables can be specified for the process in the processPath attribute. Spécifiez une variable d’environnement à l’aide de l’élément enfant <environmentVariable> d’un élément de collection <environmentVariables>.Specify an environment variable with the <environmentVariable> child element of an <environmentVariables> collection element. Les variables d’environnement définies dans cette section prévalent sur les variables d’environnement système.Environment variables set in this section take precedence over system environment variables.

Des variables d’environnement peuvent être spécifiées pour le processus dans l’attribut processPath.Environment variables can be specified for the process in the processPath attribute. Spécifiez une variable d’environnement à l’aide de l’élément enfant <environmentVariable> d’un élément de collection <environmentVariables>.Specify an environment variable with the <environmentVariable> child element of an <environmentVariables> collection element.

Avertissement

Les variables d’environnement définies dans cette section sont en conflit avec les variables d’environnement système qui ont le même nom.Environment variables set in this section conflict with system environment variables set with the same name. Si une variable d’environnement est définie à la fois dans le fichier web.config et au niveau du système dans Windows, la valeur provenant du fichier web.config est ajoutée à la valeur de la variable d’environnement système (par exemple, ASPNETCORE_ENVIRONMENT: Development;Development), ce qui empêche le démarrage de l’application.If an environment variable is set in both the web.config file and at the system level in Windows, the value from the web.config file becomes appended to the system environment variable value (for example, ASPNETCORE_ENVIRONMENT: Development;Development), which prevents the app from starting.

L’exemple suivant définit deux variables d'environnement.The following example sets two environment variables. ASPNETCORE_ENVIRONMENT définit l’environnement de l’application sur Development.ASPNETCORE_ENVIRONMENT configures the app's environment to Development. Un développeur peut définir temporairement cette valeur dans le fichier web.config afin de forcer le chargement de la Page d’exception de développeur lors du débogage d’une exception d’application.A developer may temporarily set this value in the web.config file in order to force the Developer Exception Page to load when debugging an app exception. CONFIG_DIR est un exemple de variable d’environnement définie par l’utilisateur, dans laquelle le développeur a écrit du code qui lit la valeur de démarrage afin de former un chemin d’accès pour le chargement du fichier de configuration de l’application.CONFIG_DIR is an example of a user-defined environment variable, where the developer has written code that reads the value on startup to form a path for loading the app's configuration file.

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile="\\?\%home%\LogFiles\stdout"
      hostingModel="InProcess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>
<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile="\\?\%home%\LogFiles\stdout">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

Notes

Une alternative à la définition directe de l’environnement dans le fichier web.config consiste à inclure la propriété <EnvironmentName> dans le profil de publication ( .pubxml) ou le fichier projet.An alternative to setting the environment directly in web.config is to include the <EnvironmentName> property in the publish profile (.pubxml) or project file. Cette approche définit l’environnement dans web.config lorsque le projet est publié :This approach sets the environment in web.config when the project is published:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

Avertissement

Affectez uniquement Development à la variable d’environnement ASPNETCORE_ENVIRONMENT sur les serveurs de test et de préproduction non accessibles aux réseaux non approuvés, par exemple Internet.Only set the ASPNETCORE_ENVIRONMENT environment variable to Development on staging and testing servers that aren't accessible to untrusted networks, such as the Internet.

app_offline.htmapp_offline.htm

Si un fichier portant le nom app_offline.htm est détecté dans le répertoire racine d’une application, le module ASP.NET Core tente d’arrêter normalement l’application, puis interrompt le traitement des requêtes entrantes.If a file with the name app_offline.htm is detected in the root directory of an app, the ASP.NET Core Module attempts to gracefully shutdown the app and stop processing incoming requests. Si l’application est toujours active après le nombre de secondes défini dans shutdownTimeLimit, le module ASP.NET Core met fin au processus en cours d’exécution.If the app is still running after the number of seconds defined in shutdownTimeLimit, the ASP.NET Core Module kills the running process.

Tant que le fichier app_offline.htm est présent, le module ASP.NET Core répond aux requêtes en renvoyant le contenu du fichier app_offline.htm.While the app_offline.htm file is present, the ASP.NET Core Module responds to requests by sending back the contents of the app_offline.htm file. Lorsque le fichier app_offline.htm est supprimé, la requête suivante démarre l’application.When the app_offline.htm file is removed, the next request starts the app.

Lorsque vous utilisez le modèle d’hébergement out-of-process, l’application peut ne pas s’arrêter immédiatement s’il existe une connexion ouverte.When using the out-of-process hosting model, the app might not shut down immediately if there's an open connection. Par exemple, une connexion websocket peut retarder l’arrêt de l’application.For example, a websocket connection may delay app shut down.

Page d’erreur de démarrageStart-up error page

Les hébergements in-process et out-of-process produisent des pages d’erreurs personnalisées quand ils ne parviennent pas à démarrer l’application.Both in-process and out-of-process hosting produce custom error pages when they fail to start the app.

Si le module ASP.NET Core ne trouve pas le gestionnaire de requêtes in-process ou out-of-process, une page de code d’état 500.0 - Échec de chargement du gestionnaire in-process/out-of-process s’affiche.If the ASP.NET Core Module fails to find either the in-process or out-of-process request handler, a 500.0 - In-Process/Out-Of-Process Handler Load Failure status code page appears.

Pour l’hébergement in-process, si le module ASP.NET Core ne peut pas démarrer l’application, une page de code d’état 500.30 - Échec de démarrage s’affiche.For in-process hosting if the ASP.NET Core Module fails to start the app, a 500.30 - Start Failure status code page appears.

Pour l’hébergement out-of-process, si le module ASP.NET Core ne peut pas lancer le processus backend ou que ce dernier démarre mais ne parvient pas à écouter sur le port configuré, une page de code d’état 502.5 - Échec du processus s’affiche.For out-of-process hosting if the ASP.NET Core Module fails to launch the backend process or the backend process starts but fails to listen on the configured port, a 502.5 - Process Failure status code page appears.

Pour supprimer cette page et revenir à la page IIS de codes d’état 5xx par défaut, utilisez l’attribut disableStartUpErrorPage.To suppress this page and revert to the default IIS 5xx status code page, use the disableStartUpErrorPage attribute. Pour plus d’informations sur la configuration des messages d’erreur personnalisés, consultez Erreurs HTTP <httpErrors>.For more information on configuring custom error messages, see HTTP Errors <httpErrors>.

Si le module ASP.NET Core ne peut pas lancer le processus backend ou que ce dernier démarre mais ne parvient pas à écouter sur le port configuré, une page de code d’état 502.5 - Échec du processus s’affiche.If the ASP.NET Core Module fails to launch the backend process or the backend process starts but fails to listen on the configured port, a 502.5 - Process Failure status code page appears. Pour supprimer cette page et revenir à la page IIS de code d’état 502 par défaut, utilisez l’attribut disableStartUpErrorPage.To suppress this page and revert to the default IIS 502 status code page, use the disableStartUpErrorPage attribute. Pour plus d’informations sur la configuration des messages d’erreur personnalisés, consultez Erreurs HTTP <httpErrors>.For more information on configuring custom error messages, see HTTP Errors <httpErrors>.

Page de code d’état 502.5 Échec du processus

Création et redirection de journalLog creation and redirection

Le module ASP.NET Core redirige la sortie de console stdout et stderr vers le disque si les attributs stdoutLogEnabled et stdoutLogFile de l’élément aspNetCore sont définis.The ASP.NET Core Module redirects stdout and stderr console output to disk if the stdoutLogEnabled and stdoutLogFile attributes of the aspNetCore element are set. Tous les dossiers du chemin stdoutLogFile sont créés par le module au moment de la création du fichier journal.Any folders in the stdoutLogFile path are created by the module when the log file is created. Le pool d’applications doit avoir un accès en écriture à l’emplacement auquel les journaux sont écrits (utilisez IIS AppPool\<app_pool_name> pour fournir les autorisations d’écriture).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Aucune rotation n’est appliquée aux journaux, sauf en cas de recyclage/redémarrage du processus.Logs aren't rotated, unless process recycling/restart occurs. Il incombe à l’hébergeur de limiter l’espace disque utilisé par les journaux.It's the responsibility of the hoster to limit the disk space the logs consume.

L’utilisation du journal stdout est uniquement recommandée pour résoudre les problèmes de démarrage de l’application.Using the stdout log is only recommended for troubleshooting app startup issues. N’utilisez pas le journal stdout à des fins de journalisation d’application générale.Don't use the stdout log for general app logging purposes. Pour journaliser la routine d’une application ASP.NET Core, utilisez une bibliothèque de journalisation qui limite la taille du fichier journal et appliquez une rotation aux journaux.For routine logging in an ASP.NET Core app, use a logging library that limits log file size and rotates logs. Pour plus d’informations, consultez Fournisseurs de journalisation tiers.For more information, see third-party logging providers.

Un horodatage et une extension de fichier sont ajoutés automatiquement quand le fichier journal est créé.A timestamp and file extension are added automatically when the log file is created. Le nom du fichier journal est créé en ajoutant l’horodatage, un ID de processus et une extension de fichier ( .log) au dernier segment du chemin d'accès stdoutLogFile (généralement stdout), séparés par des traits de soulignement.The log file name is composed by appending the timestamp, process ID, and file extension (.log) to the last segment of the stdoutLogFile path (typically stdout) delimited by underscores. Si le chemin d'accès stdoutLogFile se termine par stdout, un journal pour une application avec un PID de 1934 créé le 5/2/2018 à 19:42:32 affiche le nom de fichier stdout_20180205194132_1934.log.If the stdoutLogFile path ends with stdout, a log for an app with a PID of 1934 created on 2/5/2018 at 19:42:32 has the file name stdout_20180205194132_1934.log.

Si stdoutLogEnabled a la valeur false, les erreurs qui se produisent au moment du démarrage de l’application sont capturées et émises dans le journal des événements (30 Ko maximum).If stdoutLogEnabled is false, errors that occur on app startup are captured and emitted to the event log up to 30 KB. Après le démarrage, tous les journaux supplémentaires sont ignorés.After startup, all additional logs are discarded.

L’exemple d’élément aspNetCore suivant configure la journalisation stdout pour une application hébergée dans Azure App Service.The following sample aspNetCore element configures stdout logging for an app hosted in Azure App Service. Un chemin d’accès local ou un chemin de partage réseau peut être utilisé pour une journalisation locale.A local path or network share path is acceptable for local logging. Vérifiez que l’identité de l’utilisateur AppPool à l’autorisation d’écrire dans le chemin d’accès fourni.Confirm that the AppPool user identity has permission to write to the path provided.

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="true"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="InProcess">
</aspNetCore>
<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="true"
    stdoutLogFile="\\?\%home%\LogFiles\stdout">
</aspNetCore>

Journaux de diagnostic améliorésEnhanced diagnostic logs

Le module ASP.NET Core est configurable pour proposer des journaux de diagnostic améliorés.The ASP.NET Core Module is configurable to provide enhanced diagnostics logs. Ajoutez l’élément <handlerSettings> à l’élément <aspNetCore> dans web.config. L’affectation de la valeur TRACE à debugLevel expose une fidélité plus élevée des informations de diagnostic :Add the <handlerSettings> element to the <aspNetCore> element in web.config. Setting the debugLevel to TRACE exposes a higher fidelity of diagnostic information:

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="InProcess">
  <handlerSettings>
    <handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
    <handlerSetting name="debugLevel" value="FILE,TRACE" />
  </handlerSettings>
</aspNetCore>

Tous les dossiers dans le chemin d’accès (logs dans l’exemple précédent) sont créés par le module lorsque le fichier journal est créé.Any folders in the path (logs in the preceding example) are created by the module when the log file is created. Le pool d’applications doit avoir un accès en écriture à l’emplacement auquel les journaux sont écrits (utilisez IIS AppPool\<app_pool_name> pour fournir les autorisations d’écriture).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Les dossiers situés dans le chemin fourni pour la valeur <handlerSetting> (logs dans l’exemple précédent) ne sont pas créés automatiquement par le module. Ils doivent préexister dans le déploiement.Folders in the path provided to the <handlerSetting> value (logs in the preceding example) aren't created by the module automatically and should pre-exist in the deployment. Le pool d’applications doit avoir un accès en écriture à l’emplacement auquel les journaux sont écrits (utilisez IIS AppPool\<app_pool_name> pour fournir les autorisations d’écriture).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Les valeurs du niveau de débogage (debugLevel) peuvent inclure à la fois le niveau et l’emplacement.Debug level (debugLevel) values can include both the level and the location.

Niveaux (dans l’ordre du moins au plus détaillé) :Levels (in order from least to most verbose):

  • ERRORERROR
  • WARNINGWARNING
  • INFOINFO
  • TRACETRACE

Emplacements (plusieurs emplacements sont autorisés) :Locations (multiple locations are permitted):

  • CONSOLECONSOLE
  • EVENTLOGEVENTLOG
  • FICHIERFILE

Les paramètres de gestionnaire peuvent également être fournis par le biais de variables d’environnement :The handler settings can also be provided via environment variables:

  • ASPNETCORE_MODULE_DEBUG_FILE – Chemin du fichier journal de débogage.ASPNETCORE_MODULE_DEBUG_FILE – Path to the debug log file. (Par défaut : aspnetcore-debug.log)(Default: aspnetcore-debug.log)
  • ASPNETCORE_MODULE_DEBUG – Paramètre du niveau de débogage.ASPNETCORE_MODULE_DEBUG – Debug level setting.

Avertissement

Ne laissez pas la journalisation du débogage activée dans le déploiement plus longtemps que nécessaire pour résoudre un problème.Do not leave debug logging enabled in the deployment for longer than required to troubleshoot an issue. La taille du journal n’est pas limitée.The size of the log isn't limited. Si vous laissez la journalisation du débogage activée, vous risquez d’épuiser l’espace disque disponible et de bloquer le serveur ou le service d’application.Leaving the debug log enabled can exhaust the available disk space and crash the server or app service.

Consultez Configuration avec web.config pour obtenir un exemple d’élément aspNetCore dans le fichier web.config.See Configuration with web.config for an example of the aspNetCore element in the web.config file.

Modifier la taille de pileModify the stack size

Configurez la taille de pile managée à l’aide du paramètre stackSize en octets.Configure the managed stack size using the stackSize setting in bytes. La taille par défaut est 1048576 octets (1 Mo).The default size is 1048576 bytes (1 MB).

<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="InProcess">
  <handlerSettings>
    <handlerSetting name="stackSize" value="2097152" />
  </handlerSettings>
</aspNetCore>

La configuration du proxy utilise le protocole HTTP et un jeton d’appariementProxy configuration uses HTTP protocol and a pairing token

S’applique uniquement à l’hébergement out-of-process.Only applies to out-of-process hosting.

Le proxy créé entre le module ASP.NET Core et Kestrel utilise le protocole HTTP.The proxy created between the ASP.NET Core Module and Kestrel uses the HTTP protocol. Utiliser HTTP est une optimisation des performances où le trafic entre le module et Kestrel a lieu sur une adresse de bouclage hors de l’interface réseau.Using HTTP is a performance optimization, where the traffic between the module and Kestrel takes place on a loopback address off of the network interface. Il n’existe aucun risque d’écoute clandestine du trafic entre le module et Kestrel à partir d’un emplacement sur le serveur.There's no risk of eavesdropping the traffic between the module and Kestrel from a location off of the server.

Un jeton d’appariement est utilisé pour garantir que les demandes reçues par Kestrel ont été traitées par IIS et ne proviennent pas d’une autre source.A pairing token is used to guarantee that the requests received by Kestrel were proxied by IIS and didn't come from some other source. Le jeton d’appariement est créé et défini dans une variable d’environnement (ASPNETCORE_TOKEN) par le module.The pairing token is created and set into an environment variable (ASPNETCORE_TOKEN) by the module. Le jeton d’appariement est également défini dans un en-tête (MS-ASPNETCORE-TOKEN) sur toutes les demandes traitées.The pairing token is also set into a header (MS-ASPNETCORE-TOKEN) on every proxied request. L'intergiciel IIS vérifie chaque demande qu’il reçoit pour confirmer que la valeur d’en-tête du jeton d'appariement correspond à la valeur de la variable d’environnement.IIS Middleware checks each request it receives to confirm that the pairing token header value matches the environment variable value. Si les valeurs de jeton ne correspondent pas, la demande est connectée et rejetée.If the token values are mismatched, the request is logged and rejected. La variable d’environnement du jeton d'appariement et le trafic entre le module et Kestrel ne sont pas accessibles à partir d’un emplacement sur le serveur.The pairing token environment variable and the traffic between the module and Kestrel aren't accessible from a location off of the server. Sans connaître la valeur du jeton d'appariement, une personne malveillante ne peut pas soumettre des demandes qui contournent la vérification de l’intergiciel IIS.Without knowing the pairing token value, an attacker can't submit requests that bypass the check in the IIS Middleware.

Module ASP.NET Core avec une configuration partagée IISASP.NET Core Module with an IIS Shared Configuration

Le programme d’installation du module ASP.NET Core s’exécute avec les privilèges du compte TrustedInstaller.The ASP.NET Core Module installer runs with the privileges of the TrustedInstaller account. Comme le compte système local n’a pas l’autorisation de modifier le chemin de partage utilisé par la configuration partagée IIS, le programme d’installation génère une erreur d’accès refusé pendant la tentative de configuration des paramètres du module dans le fichier applicationHost.config du partage.Because the local system account doesn't have modify permission for the share path used by the IIS Shared Configuration, the installer throws an access denied error when attempting to configure the module settings in the applicationHost.config file on the share.

Quand une configuration partagée IIS est utilisée sur la même machine que l’installation IIS, il convient d’exécuter le programme d’installation du bundle d’hébergement ASP.NET Core avec le paramètre OPT_NO_SHARED_CONFIG_CHECK défini sur 1 :When using an IIS Shared Configuration on the same machine as the IIS installation, run the ASP.NET Core Hosting Bundle installer with the OPT_NO_SHARED_CONFIG_CHECK parameter set to 1:

dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1

Quand le chemin de la configuration partagée ne se trouve pas sur la même machine que l’installation IIS, effectuez ces étapes :When the path to the shared configuration isn't on the same machine as the IIS installation, follow these steps:

  1. Désactivez la configuration partagée IIS.Disable the IIS Shared Configuration.
  2. Exécutez le programme d’installation.Run the installer.
  3. Exportez le fichier applicationHost.config mis à jour vers le partage.Export the updated applicationHost.config file to the share.
  4. Réactivez la configuration partagée IIS.Re-enable the IIS Shared Configuration.

Lorsque vous utilisez une configuration partagée IIS, procédez comme suit :When using an IIS Shared Configuration, follow these steps:

  1. Désactivez la configuration partagée IIS.Disable the IIS Shared Configuration.
  2. Exécutez le programme d’installation.Run the installer.
  3. Exportez le fichier applicationHost.config mis à jour vers le partage.Export the updated applicationHost.config file to the share.
  4. Réactivez la configuration partagée IIS.Re-enable the IIS Shared Configuration.

Version du module et journaux du programme d’installation du bundle d’hébergementModule version and Hosting Bundle installer logs

Pour déterminer la version du module ASP.NET Core installé :To determine the version of the installed ASP.NET Core Module:

  1. Sur le système hôte, accédez à %windir%\System32\inetsrv.On the hosting system, navigate to %windir%\System32\inetsrv.
  2. Recherchez le fichier aspnetcore.dll.Locate the aspnetcore.dll file.
  3. Cliquez avec le bouton droit sur le fichier, puis sélectionnez Propriétés dans le menu contextuel.Right-click the file and select Properties from the contextual menu.
  4. Sélectionnez l'onglet Détails. Le version du fichier et la version du produit représentent la version installée du module.Select the Details tab. The File version and Product version represent the installed version of the module.

Les journaux du programme d’installation du bundle d’hébergement du module se trouvent dans C:\Users\%UserName%\AppData\Local\Temp. Le fichier est nommé dd_DotNetCoreWinSvrHosting__<timestamp>_000_AspNetCoreModule_x64.log.The Hosting Bundle installer logs for the module are found at C:\Users\%UserName%\AppData\Local\Temp. The file is named dd_DotNetCoreWinSvrHosting__<timestamp>_000_AspNetCoreModule_x64.log.

Emplacements des fichiers du module, du schéma et de configurationModule, schema, and configuration file locations

ModuleModule

IIS (x86/amd64) :IIS (x86/amd64):

  • %windir%\System32\inetsrv\aspnetcore.dll%windir%\System32\inetsrv\aspnetcore.dll

  • %windir%\SysWOW64\inetsrv\aspnetcore.dll%windir%\SysWOW64\inetsrv\aspnetcore.dll

  • %ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll%ProgramFiles(x86)%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll

IIS Express (x86/amd64) :IIS Express (x86/amd64):

  • %ProgramFiles%\IIS Express\aspnetcore.dll%ProgramFiles%\IIS Express\aspnetcore.dll

  • %ProgramFiles(x86)%\IIS Express\aspnetcore.dll%ProgramFiles(x86)%\IIS Express\aspnetcore.dll

  • %ProgramFiles%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll%ProgramFiles%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

  • %ProgramFiles(x86)%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll%ProgramFiles(x86)%\IIS Express\Asp.Net Core Module\V2\aspnetcorev2.dll

SchémaSchema

IISIIS

  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml%windir%\System32\inetsrv\config\schema\aspnetcore_schema.xml
  • %windir%\System32\inetsrv\config\schema\aspnetcore_schema_v2.xml%windir%\System32\inetsrv\config\schema\aspnetcore_schema_v2.xml

IIS ExpressIIS Express

  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml%ProgramFiles%\IIS Express\config\schema\aspnetcore_schema.xml
  • %ProgramFiles%\IIS Express\config\schema\aspnetcore_schema_v2.xml%ProgramFiles%\IIS Express\config\schema\aspnetcore_schema_v2.xml

ConfigurationConfiguration

IISIIS

  • %windir%\System32\inetsrv\config\applicationHost.config%windir%\System32\inetsrv\config\applicationHost.config

IIS ExpressIIS Express

  • Visual Studio : {RACINE DE L’APPLICATION}\.vs\config\applicationHost.configVisual Studio: {APPLICATION ROOT}\.vs\config\applicationHost.config

  • iisexpress.exe CLI : %PROFILUTILISATEUR%\Documents\IISExpress\config\applicationhost.configiisexpress.exe CLI: %USERPROFILE%\Documents\IISExpress\config\applicationhost.config

Vous trouverez les fichiers en recherchant aspnetcore dans le fichier applicationHost.config.The files can be found by searching for aspnetcore in the applicationHost.config file.

Ressources supplémentairesAdditional resources