Hospedaje fuera de proceso con IIS y ASP.NET Core

Dado que las aplicaciones ASP.NET Core se ejecutan en un proceso independiente del proceso de trabajo de IIS, el módulo ASP.NET Core se encarga de la administración de procesos. El módulo inicia el proceso de la aplicación ASP.NET Core cuando entra la primera solicitud y reinicia la aplicación si esta se apaga o se bloquea. Este comportamiento es básicamente el mismo que el de las aplicaciones que se ejecutan en proceso y se administran a través del Servicio de activación de procesos de Windows (WAS).

En el siguiente diagrama se muestra la relación entre IIS, el módulo ASP.NET Core y una aplicación hospedada fuera de proceso:

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

  1. Las solicitudes llegan procedentes de Internet al controlador HTTP.sys en modo kernel.
  2. El controlador enruta las solicitudes a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).
  3. El módulo reenvía las solicitudes a Kestrel en un puerto aleatorio de la aplicación, que no es ni 80 ni 443.

El módulo ASP.NET Core especifica el puerto a través de una variable de entorno en el inicio. La extensión de UseIISIntegration configura el servidor para que escuche en http://localhost:{PORT}. Se realizan más comprobaciones y se rechazan las solicitudes que no se hayan originado en el módulo. El módulo no es compatible con el reenvío de HTTPS. Las solicitudes se reenvían a través de HTTP, aunque IIS las reciba a través de HTTPS.

Una vez que Kestrel toma la solicitud del módulo, la reenvía a la canalización de middleware de ASP.NET Core. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación. El middleware agregado por la integración de IIS actualiza el esquema, la dirección IP remota y PathBase para responder del reenvío de la solicitud a Kestrel. La respuesta de la aplicación se vuelve a pasar a IIS, que la reenvía de nuevo al cliente HTTP que inició la solicitud.

Para instrucciones sobre la configuración del módulo ASP.NET Core, consulte Módulo ASP.NET Core (ANCM) para IIS.

Para obtener más información sobre el hospedaje, consulte Hospedaje en ASP.NET Core.

Configuración de aplicación

Habilitación de los componentes de integración con IIS

Al compilar un host en CreateHostBuilder (Program.cs), llame a CreateDefaultBuilder para permitir la integración de IIS:

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

Para más información sobre CreateDefaultBuilder, consulte CreateDefaultBuilder.

Modelo de hospedaje fuera de proceso

Para configurar las opciones de IIS, incluya una configuración de servicio para IISOptions en ConfigureServices. En el ejemplo siguiente se impide que la aplicación rellene HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opción Default Parámetro
AutomaticAuthentication true Si es true, el middleware de integración con IIS establece el HttpContext.User autenticado mediante autenticación de Windows. Si es false, el middleware solo proporciona una identidad para HttpContext.User y responde a los desafíos cuando se le solicita explícitamente mediante el AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione. Para más información, consulte el tema Autenticación de Windows.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.
ForwardClientCertificate true Si HttpContext.Connection.ClientCertificate y el encabezado de solicitud true está presente, se rellena MS-ASPNETCORE-CLIENTCERT.

Escenarios de servidor proxy y equilibrador de carga

El middleware de integración de IIS y el módulo de ASP.NET Core están configurados para reenviar:

  • Esquema (HTTP/HTTPS).
  • Dirección IP remota donde se originó la solicitud.

El middleware de integración de IIS configura el middleware de encabezados reenviados.

Podría ser necesario realizar una configuración adicional para las aplicaciones hospedadas detrás de servidores proxy y equilibradores de carga adicionales. Para más información, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.

Modelo de hospedaje fuera de proceso

Para configurar una aplicación para un hospedaje fuera de proceso, establezca el valor de la propiedad <AspNetCoreHostingModel> en OutOfProcess en el archivo del proyecto ( .csproj):

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

El hospedaje en proceso se establece con InProcess, que es el valor predeterminado.

El valor de <AspNetCoreHostingModel> no distingue mayúsculas de minúsculas, por lo que inprocess y outofprocess son valores válidos.

En lugar del servidor Kestrel se usa el servidor HTTP de IIS (IISHttpServer).

Fuera del proceso, CreateDefaultBuilder llama a UseIISIntegration para:

  • Configurar el puerto y la ruta de acceso base donde debe escuchar el servidor al ejecutarse detrás del módulo de ASP.NET Core.
  • Configurar el host para capturar errores de inicio.

Nombre del proceso

Process.GetCurrentProcess().ProcessName informa a w3wp/iisexpress (en proceso) o dotnet (fuera de proceso).

Muchos de los módulos nativos, como la autenticación de Windows, permanecen activos. Para obtener más información sobre los módulos de IIS activos con el módulo ASP.NET Core, vea Módulos de IIS con ASP.NET Core.

El módulo ASP.NET Core también puede:

  • Establecer variables de entorno para un proceso de trabajo.
  • Registrar la salida en un almacenamiento de archivos para solucionar problemas de inicio.
  • Reenviar tokens de autenticación de Windows.