Hospedaje de ASP.NET Core en Windows con IISHost ASP.NET Core on Windows with IIS

Para obtener una experiencia de tutorial en la publicación de una aplicación de ASP.NET Core en un servidor IIS, vea Publicación de una aplicación ASP.NET Core en IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Publicación de una aplicación ASP.NET Core en IIS.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Sistemas operativos admitidosSupported operating systems

Los siguientes sistemas operativos son compatibles:The following operating systems are supported:

  • Windows 7 o posteriorWindows 7 or later
  • Windows Server 2012 R2 o versiones posterioresWindows Server 2012 R2 or later

El servidor HTTP.sys (anteriormente denominado WebListener) no funciona en una configuración de proxy inverso con IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Use el servidor Kestrel.Use the Kestrel server.

Para obtener información sobre el hospedaje en Azure, vea Implementar aplicaciones de ASP.NET Core en Azure App Service.For information on hosting in Azure, see Implementar aplicaciones de ASP.NET Core en Azure App Service.

Para obtener instrucciones de solución de problemas, vea Solución de problemas y depuración de proyectos de ASP.NET Core.For troubleshooting guidance, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Plataformas compatiblesSupported platforms

Se admiten las aplicaciones publicadas para implementaciones de 32 bits (x86) y 64 bits (x64).Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Implemente una aplicación de 32 bits con un SDK de .NET Core de 32 bits (x86) a menos que la aplicación:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Requiera el espacio de direcciones de memoria virtual más grande disponible para una aplicación de 64 bits.Requires the larger virtual memory address space available to a 64-bit app.
  • Requiera el tamaño de la pila IIS más grande.Requires the larger IIS stack size.
  • Tenga dependencias nativas de 64 bits.Has 64-bit native dependencies.

Use un SDK de .NET Core de 64 bits (x64) para publicar una aplicación de 64 bits.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Debe haber un tiempo de ejecución de 64 bits en el sistema host.A 64-bit runtime must be present on the host system.

Modelos de hospedajeHosting models

Modelo de hospedaje en procesoIn-process hosting model

Con el hospedaje en proceso, una aplicación ASP.NET Core se ejecuta en el mismo proceso que su proceso de trabajo de IIS.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. El hospedaje en proceso proporciona un rendimiento mejorado con respecto al hospedaje fuera de proceso porque las solicitudes no se realizan mediante proxy en el adaptador de bucle invertido, una interfaz de red que devuelve el tráfico saliente a la misma máquina.In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine. IIS controla la administración de procesos con el Servicio de activación de procesos de Windows (WAS).IIS handles process management with the Windows Process Activation Service (WAS).

El módulo ASP.NET Core:The ASP.NET Core Module:

  • Realiza la inicialización de aplicaciones.Performs app initialization.
    • Carga CoreCLR.Loads the CoreCLR.
    • Llama a Program.Main.Calls Program.Main.
  • Controla la duración de la solicitud nativa de IIS.Handles the lifetime of the IIS native request.

No se admite el modelo de hospedaje en proceso para aplicaciones de ASP.NET Core que tienen como destino .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

En el siguiente diagrama se muestra la relación entre IIS, el módulo ASP.NET Core y una aplicación hospedada en proceso:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Módulo ASP.NET Core en el escenario de hospedaje dentro de proceso

Una solicitud llega de Internet al controlador HTTP.sys en modo kernel.A request arrives from the web to the kernel-mode HTTP.sys driver. El controlador enruta la solicitud nativa a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). El módulo ASP.NET Core recibe la solicitud nativa y la pasa a IIS HTTP Server (IISHttpServer).The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). El servidor HTTP de IIS es una implementación de servidor en proceso para IIS que convierte una solicitud nativa en administrada.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Una vez que IIS HTTP Server procesa la solicitud, la envía a la canalización de middleware de ASP.NET Core.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. La respuesta de la aplicación se pasa a IIS a través del servidor HTTP de IIS.The app's response is passed back to IIS through IIS HTTP Server. IIS envía la respuesta al cliente que inició la solicitud.IIS sends the response to the client that initiated the request.

El hospedaje en proceso es opcional para las aplicaciones existentes, pero, para las plantillas dotnet new, este modelo es el predeterminado para todos los escenarios de IIS e IIS Express.In-process hosting is opt-in for existing apps, but dotnet new templates default to the in-process hosting model for all IIS and IIS Express scenarios.

CreateDefaultBuilder agrega una instancia IServer mediante una llamada al método UseIIS para iniciar CoreCLR y hospedar la aplicación dentro del proceso de trabajo de IIS (w3wp.exe o iisexpress.exe).CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). Las pruebas de rendimiento indican que el hospedaje de una aplicación .NET Core en proceso proporciona un rendimiento de solicitud considerablemente mayor en comparación con el hospedaje de solicitudes de aplicaciones fuera de proceso y de proxy para el servidor Kestrel.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel server.

Nota

Las aplicaciones publicadas como un único archivo ejecutable no se pueden cargar por el modelo de hospedaje en proceso.Apps published as a single file executable can't be loaded by the in-process hosting model.

Modelo de hospedaje fuera de procesoOut-of-process hosting model

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.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. 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.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 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).This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (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:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Módulo ASP.NET Core en el escenario de hospedaje fuera de proceso

Las solicitudes llegan procedentes de Internet al controlador HTTP.sys en modo kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. El controlador enruta las solicitudes a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). El módulo reenvía las solicitudes a Kestrel en un puerto aleatorio de la aplicación, que no es ni 80 ni 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

El módulo especifica el puerto a través de la variable de entorno en el inicio, y la extensión UseIISIntegration configura el servidor para que escuche en http://localhost:{PORT}.The module specifies the port via an environment variable at startup, and the UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. Se realizan más comprobaciones y se rechazan las solicitudes que no se hayan originado en el módulo.Additional checks are performed, and requests that don't originate from the module are rejected. El módulo no admite el reenvío de HTTPS, por lo que las solicitudes se reenvían a través de HTTP, aunque IIS las reciba a través de HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Una vez que Kestrel toma la solicitud del módulo, la envía a la canalización de middleware de ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. 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.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La respuesta de la aplicación se vuelve a pasar a IIS, que la envía de nuevo al cliente HTTP que inició la solicitud.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

Para obtener instrucciones sobre la configuración del módulo ASP.NET Core, vea Módulo ASP.NET Core.For ASP.NET Core Module configuration guidance, see Módulo ASP.NET Core.

Para obtener más información sobre el hospedaje, consulte Hospedaje en ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Configuración de aplicaciónApplication configuration

Habilitación de los componentes de integración con IISEnable the IISIntegration components

Al compilar un host en CreateHostBuilder (Program.cs), llame a CreateDefaultBuilder para permitir la integración de IIS:When building a host in CreateHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

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

Para más información sobre CreateDefaultBuilder, consulte Host genérico de .NET.For more information on CreateDefaultBuilder, see Host genérico de .NET.

Opciones de IISIIS options

Modelo de hospedaje en procesoIn-process hosting model

Para configurar las opciones del servidor de IIS, incluya una configuración de servicio para IISServerOptions en ConfigureServices.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. Con el ejemplo siguiente se deshabilita AutomaticAuthentication:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el servidor IIS establece el HttpContext.User autenticado mediante la autenticación de Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Si es false, el servidor solo proporciona una identidad para HttpContext.User y responde a los desafíos cuando se le solicita explícitamente mediante el AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para obtener más información, vea Autenticación de Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.
AllowSynchronousIO false Si se permiten la E/S sincrónica para HttpContext.Request y HttpContext.Response.Whether synchronous IO is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 Obtiene o establece el tamaño máximo del cuerpo de solicitud para HttpRequest.Gets or sets the max request body size for the HttpRequest. Tenga en cuenta que el propio IIS tiene el límite de maxAllowedContentLength, que se procesará antes que el valor de MaxRequestBodySize establecido en IISServerOptions.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. El cambio de MaxRequestBodySize no afectará a maxAllowedContentLength.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. Para aumentar maxAllowedContentLength, agregue una entrada al archivo web.config para establecer maxAllowedContentLength en un valor superior.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. Para más información, consulte Configuración.For more details, see Configuration.

Modelo de hospedaje fuera de procesoOut-of-process hosting model

Para configurar las opciones de IIS, incluya una configuración de servicio para IISOptions en ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. En el ejemplo siguiente se impide que la aplicación rellene HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el middleware de integración con IIS establece el HttpContext.User autenticado mediante autenticación de Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. 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.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para más información, consulte el tema Autenticación de Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.
ForwardClientCertificate true Si HttpContext.Connection.ClientCertificate y el encabezado de solicitud true está presente, se rellena MS-ASPNETCORE-CLIENTCERT.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Escenarios de servidor proxy y equilibrador de cargaProxy server and load balancer scenarios

El middleware de integración con IIS, que configura el software intermedio de encabezados reenviados, y el módulo de ASP.NET Core están configurados para reenviar el esquema (HTTP/HTTPS) y la dirección IP remota donde se originó la solicitud.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Podría ser necesario realizar una configuración adicional para las aplicaciones hospedadas detrás de servidores proxy y equilibradores de carga adicionales.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Para más información, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Archivo web.configweb.config file

El archivo web.config configura el módulo ASP.NET Core.The web.config file configures the ASP.NET Core Module. La creación, transformación y publicación del archivo web.config se controla por medio de un destino de MSBuild (_TransformWebConfig) cuando el proyecto se publica.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Este destino está incluido entre los destinos del SDK web (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). El SDK se establece al inicio del archivo del proyecto:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Si el proyecto no incluye un archivo web.config, el archivo se crea con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Si el proyecto incluye un archivo web.config, el archivo se transforma con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. La transformación no modifica los valores de configuración de IIS del archivo.The transformation doesn't modify IIS configuration settings in the file.

El archivo web.config puede proporcionar valores de configuración de IIS adicionales que controlan los módulos activos de IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Para información sobre los módulos de IIS que son capaces de procesar las solicitudes con aplicaciones ASP.NET Core, vea el tema Módulos IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Para evitar que el SDK web transforme el archivo web.config, use la propiedad <IsTransformWebConfigDisabled> en el archivo del proyecto:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Al deshabilitar el SDK web para la transformación del archivo, el desarrollador debe establecer el elemento processPath y los argumentos manualmente.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.

Ubicación del archivo web.configweb.config file location

Para configurar el módulo ASP.NET correctamente, el archivo web.config debe estar presente en la ruta raíz de contenido (normalmente la ruta de acceso base de la aplicación) de la aplicación implementada.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Se trata de la misma ubicación que la ruta de acceso física del sitio web proporcionada a IIS.This is the same location as the website physical path provided to IIS. El archivo web.config debe estar en la raíz de la aplicación para habilitar la publicación de varias aplicaciones mediante Web Deploy.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Los archivos confidenciales están en la ruta de acceso física de la aplicación, como <ensamblado>.runtimeconfig.json, <ensamblado>.xml (comentarios de documentación XML) y <ensamblado>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Si el archivo web.config está presente y el sitio se inicia normalmente, IIS no facilita estos archivos confidenciales, en el caso de que se soliciten.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Si el archivo web.config no está presente, se le asignó un nombre incorrecto o no se puede configurar el sitio para un inicio normal, IIS puede servir archivos confidenciales públicamente.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

El archivo web.config debe estar presente en la implementación en todo momento, se le debe asignar un nombre correcto y debe ser capaz de configurar el sitio para el inicio normal. Nunca quite el archivo web.config de una implementación de producción.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformación de web.configTransform web.config

Si necesita transformar web.config al realizar la publicación (por ejemplo, establecer variables de entorno basadas en la configuración, el perfil o el entorno), consulte Transformación de web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformación de web.config.

Configuración de IISIIS configuration

Sistemas operativos de servidor WindowsWindows Server operating systems

Habilite el rol de servidor Servidor web (IIS) y establezca los servicios de rol.Enable the Web Server (IIS) server role and establish role services.

  1. Use el asistente Agregar roles y características del menú Administrar o el vínculo de Administrador del servidor.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. En el paso Roles de servidor, active la casilla de Servidor web (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    El rol Servidor web (IIS) se activa en el paso Seleccionar roles de servidor.

  2. Después del paso Características, el paso Servicios de rol se carga para el servidor Web (IIS).After the Features step, the Role services step loads for Web Server (IIS). Seleccione los servicios de rol IIS que quiera o acepte los servicios de rol predeterminados proporcionados.Select the IIS role services desired or accept the default role services provided.

    Los servicios de rol predeterminados se activan en el paso Seleccionar servicios de rol.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servidor web > Seguridad.To enable Windows Authentication, expand the following nodes: Web Server > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servidor web > Desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: Web Server > Application Development. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  3. Continúe con el paso Confirmación para instalar el rol y los servicios de servidor web.Proceed through the Confirmation step to install the web server role and services. No es necesario reiniciar el servidor ni IIS después de instalar el rol Servidor web (IIS) .A server/IIS restart isn't required after installing the Web Server (IIS) role.

Sistemas operativos de escritorio WindowsWindows desktop operating systems

Habilite Consola de administración de IIS y Servicios World Wide Web.Enable the IIS Management Console and World Wide Web Services.

  1. Vaya a Panel de control > Programas > Programas y características > Activar o desactivar las características de Windows (lado izquierdo de la pantalla).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Abra el nodo Internet Information Services.Open the Internet Information Services node. Abra el nodo Herramientas de administración web.Open the Web Management Tools node.

  3. Active la casilla de Consola de administración de IIS.Check the box for IIS Management Console.

  4. Active la casilla de Servicios World Wide Web.Check the box for World Wide Web Services.

  5. Acepte las características predeterminadas de Servicios World Wide Web o personalice las características de IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servicios World Wide Web > Seguridad.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servicios World Wide Web > Características de desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  6. Si la instalación de IIS requiere un reinicio, reinicie el sistema.If the IIS installation requires a restart, restart the system.

Consola de administración de IIS y Servicios World Wide Web se activan en Características de Windows.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Instale el conjunto de hospedaje de .NET Core en el sistema de hospedaje.Install the .NET Core Hosting Bundle on the hosting system. El lote instala .NET Core Runtime, .NET Core Library y el módulo ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. El módulo permite que las aplicaciones ASP.NET Core se ejecuten detrás de IIS.The module allows ASP.NET Core apps to run behind IIS.

Importante

Si el conjunto de hospedaje se instala antes que IIS, se debe reparar la instalación de dicho conjunto.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Vuelva a ejecutar el instalador del conjunto de hospedaje después de instalar IIS.Run the Hosting Bundle installer again after installing IIS.

Si el conjunto de hospedaje se instala después de hacer lo propio con la versión de 64 bits (x64) de .NET Core, es posible que los SDK no estén disponibles (No se ha detectado ningún SDK de .NET Core).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Para resolver el problema, consulte Solución de problemas y depuración de proyectos de ASP.NET Core.To resolve the problem, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Descarga directa (versión actual)Direct download (current version)

Descargue al instalador mediante el vínculo siguiente:Download the installer using the following link:

Instalador del conjunto de hospedaje de .NET Core actual (descarga directa)Current .NET Core Hosting Bundle installer (direct download)

Versiones anteriores del instaladorEarlier versions of the installer

Para obtener una versión anterior del instalador:To obtain an earlier version of the installer:

  1. Vaya a la página Descarga de .NET Core.Navigate to the Download .NET Core page.
  2. Haga clic en la versión de .NET Core que necesite.Click on the desired .NET Core version.
  3. En la columna Run apps - Runtime (Ejecutar aplicaciones - Runtime), busque la fila de la versión del runtime de .NET Core que quiera instalar.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Descargue el instalador mediante el vínculo Runtime & Hosting Bundle (Runtime y conjunto de hospedaje).Download the installer using the Runtime & Hosting Bundle link.

Advertencia

Algunos instaladores contienen versiones que han alcanzado el final del ciclo de vida (EOL) y ya no son compatibles con Microsoft.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Para obtener más información, consulte la política de soporte técnico.For more information, see the support policy.

Instalación del conjunto de hospedajeInstall the Hosting Bundle

  1. Ejecute el instalador en el servidor.Run the installer on the server. Los parámetros siguientes están disponibles cuando se ejecuta el instalador desde un shell de comandos de administrador:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: omite la instalación del módulo de ASP.NET Core.OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: omite la instalación del entorno de ejecución de .NET Core.OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime. Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: omite la instalación del marco compartido de ASP.NET (entorno de ejecución de ASP.NET).OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1 – omite la instalación de entornos de ejecución x86.OPT_NO_X86=1 – Skip installing x86 runtimes. Utilice este parámetro cuando sepa que no va a hospedar aplicaciones de 32 bits.Use this parameter when you know that you won't be hosting 32-bit apps. Si hay alguna posibilidad de que vaya a hospedar aplicaciones de 32 bits y 64 bits en el futuro, no use este parámetro e instale ambos entornos de ejecución.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: deshabilita la comprobación para usar una configuración compartida de IIS cuando la configuración compartida (applicationHost.config) esté en la misma máquina que la instalación de IIS.OPT_NO_SHARED_CONFIG_CHECK=1 – Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Solo disponible para ASP.NET Core 2.2 o instaladores del conjunto de hospedaje posteriores.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.
  2. Reinicie el sistema o ejecute los comandos siguientes en un shell de comandos:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Al reiniciar IIS, se recoge un cambio en la variable PATH del sistema, que es una variable de entorno, realizado por el programa de instalación.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

ASP.NET Core no adopta el comportamiento de puesta al día para las versiones de revisión de los paquetes de marco compartidos.ASP.NET Core doesn't adopt roll-forward behavior for patch releases of shared framework packages. Después de actualizar el marco compartido mediante la instalación de un nuevo lote de hospedaje, reinicie el sistema o ejecute los comandos siguientes en un shell de comandos:After upgrading the shared framework by installing a new hosting bundle, restart the system or execute the following commands in a command shell:

net stop was /y
net start w3svc

Nota

Para obtener información sobre la configuración compartida de IIS, vea ASP.NET Core Module with IIS Shared Configuration (Módulo de ASP.NET Core con configuración compartida de IIS).For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Instalación de Web Deploy al publicar con Visual StudioInstall Web Deploy when publishing with Visual Studio

Al implementar aplicaciones en servidores con Web Deploy, instale la versión más reciente de Web Deploy en el servidor.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Para instalar Web Deploy, use el Instalador de plataforma web (WebPI) u obtenga un instalador directamente desde el Centro de descarga de Microsoft.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. El método preferido es usar WebPI.The preferred method is to use WebPI. WebPI ofrece una instalación independiente y una configuración para los proveedores de hospedaje.WebPI offers a standalone setup and a configuration for hosting providers.

Creación del sitio de IISCreate the IIS site

  1. En el sistema de hospedaje, cree una carpeta para que contenga los archivos y las carpetas publicados de la aplicación.On the hosting system, create a folder to contain the app's published folders and files. En un paso posterior, la ruta de acceso de la carpeta se proporciona a IIS como la ruta de acceso física a la aplicación.In a following step, the folder's path is provided to IIS as the physical path to the app. Para obtener más información sobre el diseño de carpetas y archivos de implementación de una aplicación, consulte Estructura de directorios de ASP.NET Core.For more information on an app's deployment folder and file layout, see Estructura de directorios de ASP.NET Core.

  2. En Administrador de IIS, abra el nodo del servidor en el panel Conexiones.In IIS Manager, open the server's node in the Connections panel. Haga clic con el botón derecho en la carpeta Sitios.Right-click the Sites folder. Haga clic en Agregar sitio web en el menú contextual.Select Add Website from the contextual menu.

  3. Proporcione el Nombre del sitio y establezca la Ruta de acceso física a la carpeta de implementación de la aplicación.Provide a Site name and set the Physical path to the app's deployment folder. Proporcione la configuración de Enlace y cree el sitio web seleccionando Aceptar:Provide the Binding configuration and create the website by selecting OK:

    Proporcione el nombre del sitio, la ruta de acceso física y el nombre de host en el paso Agregar sitio web.

    Advertencia

    Los enlaces de carácter comodín de nivel superior (http://*:80/ y http://+:80) no se deben usar.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Los enlaces de carácter comodín de nivel superior pueden exponer su aplicación a vulnerabilidades de seguridad.Top-level wildcard bindings can open up your app to security vulnerabilities. Esto se aplica tanto a los caracteres comodín fuertes como a los débiles.This applies to both strong and weak wildcards. Use nombres de host explícitos en lugar de caracteres comodín.Use explicit host names rather than wildcards. Los enlaces de carácter comodín de subdominio (por ejemplo, *.mysub.com) no suponen este riesgo de seguridad si se controla todo el dominio primario (a diferencia de *.com, que sí es vulnerable).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vea la sección 5.4 de RFC 7230 para obtener más información.See rfc7230 section-5.4 for more information.

  4. En el nodo del servidor, seleccione Grupos de aplicaciones.Under the server's node, select Application Pools.

  5. Haga clic con el botón derecho en el grupo de aplicaciones del sitio y seleccione Configuración básica en el menú contextual.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. En la ventana Modificar grupo de aplicaciones, establezca Versión de .NET CLR en Sin código administrado:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Establezca Sin código administrado para Versión de .NET CLR.

    ASP.NET Core se ejecuta en un proceso independiente y administra el runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core no se basa en la carga de CLR de escritorio (.NET CLR); Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. El establecimiento de Versión de .NET CLR en Sin código administrado es opcional, pero no es lo recomendable.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 o posterior: en el caso de las implementaciones independientes de 64 bits (x64) en las que se use un modelo de hospedaje en proceso, deshabilite el grupo de aplicaciones de los procesos de 32 bits (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    En la barra lateral Acciones de la sección Grupos de aplicaciones de Administrador de IIS, seleccione Establecer valores predeterminados de grupos de aplicaciones o Configuración avanzada.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Busque la opción Habilitar aplicaciones de 32 bits y establezca el valor en False.Locate Enable 32-Bit Applications and set the value to False. Las aplicaciones implementadas para un hospedaje fuera de proceso no se ven afectadas por este ajuste.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Confirme que la identidad del modelo de proceso tiene los permisos adecuados.Confirm the process model identity has the proper permissions.

    Si cambia la identidad predeterminada del grupo de aplicaciones (Modelo de proceso > Identidad) de ApplicationPoolIdentity a otra identidad, compruebe que la nueva identidad tenga los permisos necesarios para obtener acceso a la carpeta de la aplicación, la base de datos y otros recursos necesarios.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Por ejemplo, el grupo de aplicaciones requiere acceso de lectura y escritura a las carpetas donde la aplicación lee y escribe archivos.For example, the app pool requires read and write access to folders where the app reads and writes files.

Configuración de la autenticación de Windows (opcional)Windows Authentication configuration (Optional)
Para más información, consulte Configurar la autenticación de Windows.For more information, see Configure Windows authentication.

Implementación de la aplicaciónDeploy the app

Implemente la aplicación en la carpeta Ruta de acceso física de IIS que se creó en la sección Creación del sitio de IIS.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy es el mecanismo recomendado para la implementación, pero existen varias opciones para mover la aplicación desde la carpeta publicar del proyecto a la carpeta de implementación del sistema host.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy con Visual StudioWeb Deploy with Visual Studio

Vea el tema Visual Studio publish profiles for ASP.NET Core app deployment (Perfiles de publicación de Visual Studio para la implementación de aplicaciones de ASP.NET Core) para obtener más información sobre cómo crear un perfil de publicación para su uso con Web Deploy.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Si el proveedor de hospedaje proporciona un perfil de publicación o permite crear uno, descargue su perfil e impórtelo mediante el cuadro de diálogo Publicar de Visual Studio:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Cuadro de diálogo Publicar

Web Deploy fuera de Visual StudioWeb Deploy outside of Visual Studio

También puede usar Web Deploy fuera de Visual Studio desde la línea de comandos.Web Deploy can also be used outside of Visual Studio from the command line. Para más información, vea Web Deployment Tool (Herramienta de implementación web).For more information, see Web Deployment Tool.

Alternativas a Web DeployAlternatives to Web Deploy

Use cualquiera de los métodos disponibles para mover la aplicación al sistema de hospedaje, como copia manual, Xcopy, Robocopy o PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Para obtener más información sobre ASP.NET Core en IIS, vea la sección Recursos de implementación para administradores de IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Examinar el sitio webBrowse the website

Cuando la aplicación esté implementada en el sistema de hospedaje, realice una solicitud a uno de los puntos de conexión públicos de la aplicación.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

En el ejemplo siguiente, el sitio se enlaza a un Nombre de host de IIS de www.mysite.com en el Puerto 80.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Se realiza una solicitud a http://www.mysite.com:A request is made to http://www.mysite.com:

El explorador Microsoft Edge ha cargado la página de inicio de IIS.

Archivos de implementación bloqueadosLocked deployment files

Los archivos de la carpeta de implementación se bloquean cuando se ejecuta la aplicación.Files in the deployment folder are locked when the app is running. Los archivos bloqueados no se pueden sobrescribir durante la implementación.Locked files can't be overwritten during deployment. Para liberar archivos bloqueados de una implementación, detenga el grupo de aplicaciones mediante uno de los enfoques siguientes:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Use Web Deploy con una referencia a Microsoft.NET.Sdk.Web en el archivo de proyecto.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Se coloca un archivo app_offline.htm en la raíz del directorio de aplicación web.An app_offline.htm file is placed at the root of the web app directory. Cuando el archivo está presente, el módulo de ASP.NET Core cierra correctamente la aplicación y proporciona el archivo app_offline.htm durante la implementación.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Para más información, vea ASP.NET Core Module configuration reference (Referencia de configuración del módulo de ASP.NET Core).For more information, see the ASP.NET Core Module configuration reference.

  • Detenga manualmente el grupo de aplicaciones en el Administrador de IIS en el servidor.Manually stop the app pool in the IIS Manager on the server.

  • Utilice PowerShell para colocar app_offline.htm (es necesario PowerShell 5 o una versión posterior):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Protección de datosData protection

La pila de protección de datos de ASP.NET Core la usan varios middlewares de ASP.NET Core, incluidos los que se emplean en la autenticación.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Aunque el código de usuario no llame a las API de protección de datos, la protección de datos se debe configurar con un script de implementación o en el código de usuario para crear un almacén de claves criptográficas persistente.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Si no se configura la protección de datos, las claves se conservan en memoria y se descartan cuando se reinicia la aplicación.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Si el conjunto de claves se almacena en memoria cuando se reinicia la aplicación:If the key ring is stored in memory when the app restarts:

  • Todos los tokens de autenticación basados en cookies se invalidan.All cookie-based authentication tokens are invalidated.
  • Los usuarios tienen que iniciar sesión de nuevo en la siguiente solicitud.Users are required to sign in again on their next request.
  • Ya no se pueden descifrar los datos protegidos con el conjunto de claves.Any data protected with the key ring can no longer be decrypted. Esto puede incluir tokens CSRF y cookies de TempData de ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Para configurar la protección de datos en IIS para conservar el conjunto de claves, use uno de los enfoques siguientes:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Crear claves del Registro de protección de datosCreate Data Protection Registry Keys

    Las claves de protección de datos que las aplicaciones de ASP.NET usan se almacenan en el Registro externo a las aplicaciones.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Para conservar las claves de una determinada aplicación, cree claves del Registro para el grupo de aplicaciones.To persist the keys for a given app, create registry keys for the app pool.

    En las instalaciones independientes de IIS que no son de granja de servidores web, puede usar el script de PowerShell Provision-AutoGenKeys.ps1 de protección de datos para cada grupo de aplicaciones usado con una aplicación de ASP.NET Core.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Este script crea una clave del Registro en el registro HKLM que solo es accesible a la cuenta de proceso de trabajo del grupo de aplicaciones de la aplicación.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Las claves se cifran en reposo mediante DPAPI con una clave de equipo.Keys are encrypted at rest using DPAPI with a machine-wide key.

    En escenarios de granja de servidores web, una aplicación puede configurarse para usar una ruta de acceso UNC para almacenar su conjunto de claves de protección de datos.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. De forma predeterminada, las claves de protección de datos no se cifran.By default, the data protection keys aren't encrypted. Asegúrese de que los permisos de archivo de un recurso compartido de red se limitan a la cuenta de Windows bajo la que se ejecuta la aplicación.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Puede usar un certificado X509 para proteger las claves en reposo.An X509 certificate can be used to protect keys at rest. Considere un mecanismo que permita a los usuarios cargar certificados: coloque los certificados en el almacén de certificados de confianza del usuario y asegúrese de que están disponibles en todos los equipos en los que se ejecuta la aplicación del usuario.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Vea Configurar la protección de datos en ASP.NET Core para más información.See Configure ASP.NET Core Data Protection for details.

  • Configurar el grupo de aplicaciones de IIS para cargar el perfil de usuarioConfigure the IIS Application Pool to load the user profile

    Esta opción está en la sección Modelo de proceso, en la Configuración avanzada del grupo de aplicaciones.This setting is in the Process Model section under the Advanced Settings for the app pool. Establezca Cargar perfil de usuario en True.Set Load User Profile to True. Cuando se establece en True, las claves se almacenan en el directorio del perfil de usuario y se protegen mediante DPAPI con una clave específica de la cuenta de usuario.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Las claves se conservan en la carpeta %HOME%\ASP.NET\DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    También se debe habilitar el atributo setProfileEnvironment del grupo de aplicaciones.The app pool's setProfileEnvironment attribute must also be enabled. El valor predeterminado de setProfileEnvironment es true.The default value of setProfileEnvironment is true. En algunos escenarios (por ejemplo, SO Windows), setProfileEnvironment está establecido en false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Si las claves no se almacenan en el directorio del perfil de usuario como se esperaba:If keys aren't stored in the user profile directory as expected:

    1. Vaya a la carpeta %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Abra el archivo applicationHost.config.Open the applicationHost.config file.
    3. Busque el elemento <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Confirme que el atributo setProfileEnvironment no está presente, que adopta de forma predeterminada el valor true, o establezca explícitamente el valor del atributo en true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Usar el sistema de archivos como un almacén de conjunto de clavesUse the file system as a key ring store

    Ajuste el código de la aplicación para usar el sistema de archivos como un almacén de conjunto de claves.Adjust the app code to use the file system as a key ring store. Use un certificado X509 para proteger el conjunto de claves y asegúrese de que sea un certificado de confianza.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Si es un certificado autofirmado, colóquelo en el almacén raíz de confianza.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Cuando se usa IIS en una granja de servidores web:When using IIS in a web farm:

    • Use un recurso compartido de archivos al que puedan acceder todos los equipos.Use a file share that all machines can access.
    • Implemente un certificado X509 en cada equipo.Deploy an X509 certificate to each machine. Configure la protección de datos en el código.Configure data protection in code.
  • Establecer una directiva para todo el equipo para la protección de datosSet a machine-wide policy for data protection

    El sistema de protección de datos tiene compatibilidad limitada con el establecimiento de una directiva de equipo predeterminada para todas las aplicaciones que usan las API de protección de datos.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Para obtener más información, vea ASP.NET Core protección de datos.For more information, see ASP.NET Core protección de datos.

Directorios virtualesVirtual Directories

Los directorios virtuales de IIS no son compatibles con aplicaciones ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Una aplicación puede hospedarse como subaplicación.An app can be hosted as a sub-application.

SubaplicacionesSub-applications

Se puede hospedar una aplicación ASP.NET Core como una subaplicación IIS.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). La ruta de acceso de la subaplicación se convierte en parte de la dirección URL de la aplicación raíz.The sub-app's path becomes part of the root app's URL.

Los vínculos a los recursos estáticos dentro de la aplicación secundaria deben utilizar una notación de una tilde con una barra diagonal (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. La notación de tilde barra diagonal desencadena un asistente de etiquetas para anteponer la ruta de acceso de la aplicación secundaria al vínculo relativo representado.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Para una aplicación secundaria en /subapp_path, una imagen vinculada con src="~/image.png" se representa como src="/subapp_path/image.png".For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". El middleware de archivos estáticos de la aplicación raíz no procesa la solicitud de archivo estático.The root app's Static File Middleware doesn't process the static file request. La solicitud se procesa mediante el middleware de archivos estáticos de la aplicación secundaria.The request is processed by the sub-app's Static File Middleware.

Si el atributo src de un recurso estático se establece en una ruta de acceso absoluta (por ejemplo, src="/image.png"), el vínculo se representa sin la base de la ruta de acceso de la aplicación secundaria.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. El middleware de archivos estáticos de la aplicación raíz intenta atender al recurso desde el web root, lo que resulta en una respuesta 404 - No encontrado a menos que el recurso estático esté disponible desde la aplicación raíz.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

Para hospedar una aplicación ASP.NET Core como aplicación secundaria en otra aplicación ASP.NET Core:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Establezca un grupo de aplicaciones para la aplicación secundaria.Establish an app pool for the sub-app. Establezca Versión de .NET CLR en Sin código administrado porque Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo, no el CLR de escritorio (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Agregue el sitio raíz en el Administrador de IIS con la aplicación secundaria en una carpeta en el sitio raíz.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Haga clic con el botón derecho en la carpeta de la aplicación secundaria en el Administrador de IIS y seleccione Convertir en aplicación.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. En el cuadro de diálogo Agregar aplicación, use el botón Seleccionar en Grupo de aplicaciones para asignar el grupo de aplicaciones que ha creado para la aplicación secundaria.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Seleccione Aceptar.Select OK.

La asignación de un grupo de aplicaciones independiente de la aplicación secundaria es un requisito cuando se utiliza el modelo de hospedaje en proceso.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Para más información sobre el modelo de hospedaje en proceso y cómo configurar el módulo de ASP.NET Core, consulte Módulo ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Módulo ASP.NET Core.

Configuración de IIS con web.configConfiguration of IIS with web.config

En escenarios de IIS que son funcionales para aplicaciones ASP.NET Core con el módulo ASP.NET Core, la configuración de IIS está influenciada por la sección <system.webServer> de web.config.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Por ejemplo, la configuración de IIS es funcional para la compresión dinámica.For example, IIS configuration is functional for dynamic compression. Si IIS está configurado en el nivel de servidor para usar compresión dinámica, el elemento <urlCompression> del archivo web.config de la aplicación puede deshabilitarlo para una aplicación ASP.NET Core.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Para obtener más información, vea los temas siguientes:For more information, see the following topics:

Para establecer variables de entorno para aplicaciones individuales que se ejecutan en grupos de aplicaciones aislados (se admite para IIS 10.0 o posterior), vea la sección AppCmd.exe command (Comando AppCmd.exe) del tema Environment Variables <environmentVariables> (Variables de entorno ) de la documentación de referencia de IIS.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Secciones de configuración de web.configConfiguration sections of web.config

Las aplicaciones ASP.NET Core no usan las secciones de configuración de aplicaciones ASP.NET 4.x en web.config para la configuración:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Las aplicaciones de ASP.NET Core se configuran mediante otros proveedores de configuración.ASP.NET Core apps are configured using other configuration providers. Para obtener más información, vea Configuración.For more information, see Configuration.

Grupos de aplicacionesApplication Pools

El aislamiento de los grupos de aplicaciones se determinan mediante el modelo de hospedaje:App pool isolation is determined by the hosting model:

  • Hospedaje dentro de proceso: es necesario que las aplicaciones se ejecuten en grupos de aplicaciones distintos.In-process hosting – Apps are required to run in separate app pools.
  • Hospedaje fuera de proceso: nuestra recomendación es aislar las aplicaciones entre sí ejecutándolas en su propio grupo de aplicaciones.Out-of-process hosting – We recommend isolating the apps from each other by running each app in its own app pool.

El valor predeterminado del cuadro de diálogo Agregar sitio web de IIS es un único grupo de aplicaciones por aplicación.The IIS Add Website dialog defaults to a single app pool per app. Cuando se proporciona el Nombre del sitio, el texto se transfiere automáticamente al cuadro de texto Grupo de aplicaciones.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Al agregar el sitio se crea un grupo de aplicaciones con el nombre del sitio.A new app pool is created using the site name when the site is added.

Identidad del grupo de aplicacionesApplication Pool Identity

Una cuenta de identidad del grupo de aplicaciones permite ejecutar una aplicación en una cuenta única sin tener que crear ni administrar dominios o cuentas locales.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. En IIS 8.0 o versiones posteriores, el proceso de trabajo de administración de IIS (WAS) crea una cuenta virtual con el nombre del nuevo grupo de aplicaciones y ejecuta los procesos de trabajo del grupo de aplicaciones en esta cuenta de forma predeterminada.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. En la Consola de administración de IIS, en la opción Configuración avanzada del grupo de aplicaciones, asegúrese de que la Identidad está establecida para usar ApplicationPoolIdentity:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Cuadro de diálogo Configuración avanzada del grupo de aplicaciones

El proceso de administración de IIS crea un identificador seguro con el nombre del grupo de aplicaciones en el sistema de seguridad de Windows.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Los recursos se pueden proteger mediante esta identidad.Resources can be secured using this identity. Sin embargo, no es una cuenta de usuario real ni se muestra en la consola de administración de usuario de Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Si el proceso de trabajo de IIS requiere acceso con privilegios elevados a la aplicación, modifique la lista de control de acceso (ACL) del directorio que contiene la aplicación:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Abra el Explorador de Windows y vaya al directorio.Open Windows Explorer and navigate to the directory.

  2. Haga clic con el botón derecho en el directorio y seleccione Propiedades.Right-click on the directory and select Properties.

  3. En la pestaña Seguridad, haga clic en el botón Editar y en el botón Agregar.Under the Security tab, select the Edit button and then the Add button.

  4. Haga clic en el botón Ubicaciones y asegúrese de seleccionar el sistema.Select the Locations button and make sure the system is selected.

  5. Escriba IIS AppPool\<nombre_del_grupo_de_aplicaciones> en el área Escribir los nombres de objeto para seleccionar.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Haga clic en el botón Comprobar nombres.Select the Check Names button. Para DefaultAppPool compruebe los nombres con IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Cuando el botón Comprobar nombres está seleccionado, un valor de DefaultAppPool se indica en el área de los nombres de objeto.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. No es posible escribir el nombre del grupo de aplicaciones directamente en el área de los nombres de objeto.It isn't possible to enter the app pool name directly into the object names area. Use el formato IIS AppPool\<nombre_del_grupo_de_aplicaciones> cuando compruebe el nombre del objeto.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: el nombre del grupo de aplicaciones de "DefaultAppPool" se anexa al "IIS AppPool" en el área de los nombres de objeto antes de seleccionar "Comprobar nombres".

  6. Seleccione Aceptar.Select OK.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: después de seleccionar "Comprobar nombres", el nombre del objeto "DefaultAppPool" se muestra en el área de los nombres de objeto.

  7. Los permisos de lectura y ejecución se deben conceder de forma predeterminada.Read & execute permissions should be granted by default. Proporcione permisos adicionales según sea necesario.Provide additional permissions as needed.

El acceso también se puede conceder mediante un símbolo del sistema con la herramienta ICACLS.Access can also be granted at a command prompt using the ICACLS tool. En el siguiente comando se usa DefaultAppPool como ejemplo:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Para más información, consulte el tema icacls.For more information, see the icacls topic.

Compatibilidad con HTTP/2HTTP/2 support

HTTP/2 es compatible con ASP.NET Core en los escenarios de implementación de IIS siguientes:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • En procesoIn-process
    • Windows Server 2016/Windows 10 o posterior; IIS 10 o posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Conexión con TLS 1.2 o una versión posteriorTLS 1.2 or later connection
  • Fuera de procesoOut-of-process
    • Windows Server 2016/Windows 10 o posterior; IIS 10 o posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Las conexiones de servidor perimetral de acceso público usan HTTP/2, pero la conexión de proxy inverso al servidor de Kestrel usa HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • Conexión con TLS 1.2 o una versión posteriorTLS 1.2 or later connection

Para una implementación en proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol notifica HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Para una implementación fuera de proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol notifica HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Para obtener más información sobre los modelos de hospedaje en proceso y fuera de proceso, consulte Módulo ASP.NET Core.For more information on the in-process and out-of-process hosting models, see Módulo ASP.NET Core.

HTTP/2 está habilitado de forma predeterminada.HTTP/2 is enabled by default. Las conexiones vuelven a HTTP/1.1 si no se establece una conexión HTTP/2.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Para más información sobre la configuración HTTP/2 con implementaciones de IIS, vea HTTP/2 en IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Solicitudes CORS de preflightCORS preflight requests

Esta sección solo se aplica a las aplicaciones de ASP.NET Core que tienen como destino .NET Framework.This section only applies to ASP.NET Core apps that target the .NET Framework.

Para una aplicación de ASP.NET Core que tiene como destino .NET Framework, las solicitudes OPTIONS no se pasan a la aplicación de forma predeterminada en IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Para obtener información sobre cómo configurar los controladores de IIS de la aplicación en web.config para pasar las solicitudes OPTIONS, consulte Habilitar solicitudes entre orígenes en ASP.NET Web API 2: Cómo funciona la CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Módulo de inicialización de aplicaciones y tiempo de espera de inactividadApplication Initialization Module and Idle Timeout

Cuando se hospeda en IIS mediante la versión 2 del módulo de ASP.NET Core:When hosted in IIS by the ASP.NET Core Module version 2:

Módulo de inicialización de aplicacionesApplication Initialization Module

Se aplica a las aplicaciones hospedadas dentro de proceso y fuera de proceso.Applies to apps hosted in-process and out-of-process.

Inicialización de aplicaciones de IIS es una característica de IIS que envía una solicitud HTTP a la aplicación al iniciarse o reciclarse el grupo de aplicaciones.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. La solicitud desencadena el inicio de la aplicación.The request triggers the app to start. De forma predeterminada, IIS emite una solicitud a la dirección URL raíz de la aplicación (/) para inicializar esta (consulte los recursos adicionales para más detalles sobre la configuración).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

Confirme que la característica de rol Inicialización de aplicaciones de IIS está habilitada:Confirm that the IIS Application Initialization role feature in enabled:

En Windows 7 o sistemas de escritorio posteriores cuando se usa IIS localmente:On Windows 7 or later desktop systems when using IIS locally:

  1. Vaya a Panel de control > Programas > Programas y características > Activar o desactivar las características de Windows (lado izquierdo de la pantalla).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Abra Internet Information Services > Servicios World Wide Web > Características de desarrollo de aplicaciones.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Active la casilla de Inicialización de aplicaciones.Select the check box for Application Initialization.

En Windows Server 2008 R2 o posterior:On Windows Server 2008 R2 or later:

  1. Abra el Asistente para agregar roles y características.Open the Add Roles and Features Wizard.
  2. En el panel Seleccionar servicios de rol, abra el nodo Desarrollo de aplicaciones.In the Select role services panel, open the Application Development node.
  3. Active la casilla de Inicialización de aplicaciones.Select the check box for Application Initialization.

Use cualquiera de los enfoques siguientes para habilitar el módulo de inicialización de aplicaciones para el sitio:Use either of the following approaches to enable the Application Initialization Module for the site:

  • Mediante el Administrador de IIS:Using IIS Manager:

    1. Seleccione Grupos de aplicaciones en el panel Conexiones.Select Application Pools in the Connections panel.
    2. Haga clic con el botón derecho en el grupo de aplicaciones de la aplicación en la lista y seleccione Configuración avanzada.Right-click the app's app pool in the list and select Advanced Settings.
    3. El valor predeterminado de Modo de inicio es OnDemand.The default Start Mode is OnDemand. Establezca Modo de inicio en AlwaysRunning.Set the Start Mode to AlwaysRunning. Seleccione Aceptar.Select OK.
    4. Abra el nodo Sitios en el panel Conexiones.Open the Sites node in the Connections panel.
    5. Haga clic con el botón derecho en la aplicación y seleccione Administrar sitio web > Configuración avanzada.Right-click the app and select Manage Website > Advanced Settings.
    6. El valor predeterminado de Carga previa activada es False.The default Preload Enabled setting is False. Establezca Carga previa activada en True.Set Preload Enabled to True. Seleccione Aceptar.Select OK.
  • Mediante web.config, agregue el elemento <applicationInitialization> con doAppInitAfterRestart establecido en true a los elementos <system.webServer> del archivo web.config de la aplicación:Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Tiempo de espera de inactividadIdle Timeout

Solo se aplica a las aplicaciones hospedadas dentro de proceso.Only applies to apps hosted in-process.

Para evitar la inactividad en la aplicación, establezca el tiempo de espera de inactividad del grupo de aplicaciones mediante el Administrador de IIS:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Seleccione Grupos de aplicaciones en el panel Conexiones.Select Application Pools in the Connections panel.
  2. Haga clic con el botón derecho en el grupo de aplicaciones de la aplicación en la lista y seleccione Configuración avanzada.Right-click the app's app pool in the list and select Advanced Settings.
  3. El valor predeterminado de Tiempo de inactividad (minutos) es 20 minutos.The default Idle Time-out (minutes) is 20 minutes. Establezca Tiempo de inactividad (minutos) en 0 (cero).Set the Idle Time-out (minutes) to 0 (zero). Seleccione Aceptar.Select OK.
  4. Desactive y vuelva a activar el proceso de trabajo.Recycle the worker process.

Para evitar que las aplicaciones hospedadas fuera de proceso agoten el tiempo de espera, use cualquiera de los enfoques siguientes:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Recursos adicionales del módulo de inicialización de aplicaciones y del tiempo de espera de inactividadApplication Initialization Module and Idle Timeout additional resources

Recursos de implementación para administradores de IISDeployment resources for IIS administrators

Recursos adicionalesAdditional resources

Para obtener una experiencia de tutorial en la publicación de una aplicación de ASP.NET Core en un servidor IIS, vea Publicación de una aplicación ASP.NET Core en IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Publicación de una aplicación ASP.NET Core en IIS.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Sistemas operativos admitidosSupported operating systems

Los siguientes sistemas operativos son compatibles:The following operating systems are supported:

  • Windows 7 o posteriorWindows 7 or later
  • Windows Server 2008 R2 o posteriorWindows Server 2008 R2 or later

El servidor HTTP.sys (anteriormente denominado WebListener) no funciona en una configuración de proxy inverso con IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Use el servidor Kestrel.Use the Kestrel server.

Para obtener información sobre el hospedaje en Azure, vea Implementar aplicaciones de ASP.NET Core en Azure App Service.For information on hosting in Azure, see Implementar aplicaciones de ASP.NET Core en Azure App Service.

Para obtener instrucciones de solución de problemas, vea Solución de problemas y depuración de proyectos de ASP.NET Core.For troubleshooting guidance, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Plataformas compatiblesSupported platforms

Se admiten las aplicaciones publicadas para implementaciones de 32 bits (x86) y 64 bits (x64).Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Implemente una aplicación de 32 bits con un SDK de .NET Core de 32 bits (x86) a menos que la aplicación:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Requiera el espacio de direcciones de memoria virtual más grande disponible para una aplicación de 64 bits.Requires the larger virtual memory address space available to a 64-bit app.
  • Requiera el tamaño de la pila IIS más grande.Requires the larger IIS stack size.
  • Tenga dependencias nativas de 64 bits.Has 64-bit native dependencies.

Use un SDK de .NET Core de 64 bits (x64) para publicar una aplicación de 64 bits.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Debe haber un tiempo de ejecución de 64 bits en el sistema host.A 64-bit runtime must be present on the host system.

Modelos de hospedajeHosting models

Modelo de hospedaje en procesoIn-process hosting model

Con el hospedaje en proceso, una aplicación ASP.NET Core se ejecuta en el mismo proceso que su proceso de trabajo de IIS.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. El hospedaje en proceso proporciona un rendimiento mejorado con respecto al hospedaje fuera de proceso porque las solicitudes no se realizan mediante proxy en el adaptador de bucle invertido, una interfaz de red que devuelve el tráfico saliente a la misma máquina.In-process hosting provides improved performance over out-of-process hosting because requests aren't proxied over the loopback adapter, a network interface that returns outgoing network traffic back to the same machine. IIS controla la administración de procesos con el Servicio de activación de procesos de Windows (WAS).IIS handles process management with the Windows Process Activation Service (WAS).

El módulo ASP.NET Core:The ASP.NET Core Module:

  • Realiza la inicialización de aplicaciones.Performs app initialization.
    • Carga CoreCLR.Loads the CoreCLR.
    • Llama a Program.Main.Calls Program.Main.
  • Controla la duración de la solicitud nativa de IIS.Handles the lifetime of the IIS native request.

No se admite el modelo de hospedaje en proceso para aplicaciones de ASP.NET Core que tienen como destino .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

En el siguiente diagrama se muestra la relación entre IIS, el módulo ASP.NET Core y una aplicación hospedada en proceso:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Módulo ASP.NET Core en el escenario de hospedaje dentro de proceso

Una solicitud llega de Internet al controlador HTTP.sys en modo kernel.A request arrives from the web to the kernel-mode HTTP.sys driver. El controlador enruta la solicitud nativa a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). El módulo ASP.NET Core recibe la solicitud nativa y la pasa a IIS HTTP Server (IISHttpServer).The ASP.NET Core Module receives the native request and passes it to IIS HTTP Server (IISHttpServer). El servidor HTTP de IIS es una implementación de servidor en proceso para IIS que convierte una solicitud nativa en administrada.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

Una vez que IIS HTTP Server procesa la solicitud, la envía a la canalización de middleware de ASP.NET Core.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. La respuesta de la aplicación se pasa a IIS a través del servidor HTTP de IIS.The app's response is passed back to IIS through IIS HTTP Server. IIS envía la respuesta al cliente que inició la solicitud.IIS sends the response to the client that initiated the request.

El hospedaje en proceso es opcional para las aplicaciones existentes, pero, para las plantillas dotnet new, este modelo es el predeterminado para todos los escenarios de IIS e IIS Express.In-process hosting is opt-in for existing apps, but dotnet new templates default to the in-process hosting model for all IIS and IIS Express scenarios.

CreateDefaultBuilder agrega una instancia IServer mediante una llamada al método UseIIS para iniciar CoreCLR y hospedar la aplicación dentro del proceso de trabajo de IIS (w3wp.exe o iisexpress.exe).CreateDefaultBuilder adds an IServer instance by calling the UseIIS method to boot the CoreCLR and host the app inside of the IIS worker process (w3wp.exe or iisexpress.exe). Las pruebas de rendimiento indican que el hospedaje de una aplicación .NET Core en proceso proporciona un rendimiento de solicitud considerablemente mayor en comparación con el hospedaje de solicitudes de aplicaciones fuera de proceso y de proxy para el servidor Kestrel.Performance tests indicate that hosting a .NET Core app in-process delivers significantly higher request throughput compared to hosting the app out-of-process and proxying requests to Kestrel server.

Modelo de hospedaje fuera de procesoOut-of-process hosting model

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.Because ASP.NET Core apps run in a process separate from the IIS worker process, the ASP.NET Core Module handles process management. 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.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 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).This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (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:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Módulo ASP.NET Core en el escenario de hospedaje fuera de proceso

Las solicitudes llegan procedentes de Internet al controlador HTTP.sys en modo kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. El controlador enruta las solicitudes a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). El módulo reenvía las solicitudes a Kestrel en un puerto aleatorio de la aplicación, que no es ni 80 ni 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

El módulo especifica el puerto a través de la variable de entorno en el inicio, y la extensión UseIISIntegration configura el servidor para que escuche en http://localhost:{PORT}.The module specifies the port via an environment variable at startup, and the UseIISIntegration extension configures the server to listen on http://localhost:{PORT}. Se realizan más comprobaciones y se rechazan las solicitudes que no se hayan originado en el módulo.Additional checks are performed, and requests that don't originate from the module are rejected. El módulo no admite el reenvío de HTTPS, por lo que las solicitudes se reenvían a través de HTTP, aunque IIS las reciba a través de HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Una vez que Kestrel toma la solicitud del módulo, la envía a la canalización de middleware de ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. 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.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La respuesta de la aplicación se vuelve a pasar a IIS, que la envía de nuevo al cliente HTTP que inició la solicitud.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

Para obtener instrucciones sobre la configuración del módulo ASP.NET Core, vea Módulo ASP.NET Core.For ASP.NET Core Module configuration guidance, see Módulo ASP.NET Core.

Para obtener más información sobre el hospedaje, consulte Hospedaje en ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Configuración de aplicaciónApplication configuration

Habilitación de los componentes de integración con IISEnable the IISIntegration components

Al compilar un host en CreateWebHostBuilder (Program.cs), llame a CreateDefaultBuilder para permitir la integración de IIS:When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Para más información sobre CreateDefaultBuilder, consulte Host web de ASP.NET Core.For more information on CreateDefaultBuilder, see Host web de ASP.NET Core.

Opciones de IISIIS options

Modelo de hospedaje en procesoIn-process hosting model

Para configurar las opciones del servidor de IIS, incluya una configuración de servicio para IISServerOptions en ConfigureServices.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. Con el ejemplo siguiente se deshabilita AutomaticAuthentication:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el servidor IIS establece el HttpContext.User autenticado mediante la autenticación de Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Si es false, el servidor solo proporciona una identidad para HttpContext.User y responde a los desafíos cuando se le solicita explícitamente mediante el AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para obtener más información, vea Autenticación de Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.

Modelo de hospedaje fuera de procesoOut-of-process hosting model

Para configurar las opciones de IIS, incluya una configuración de servicio para IISOptions en ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. En el ejemplo siguiente se impide que la aplicación rellene HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el middleware de integración con IIS establece el HttpContext.User autenticado mediante autenticación de Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. 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.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para más información, consulte el tema Autenticación de Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.
ForwardClientCertificate true Si HttpContext.Connection.ClientCertificate y el encabezado de solicitud true está presente, se rellena MS-ASPNETCORE-CLIENTCERT.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Escenarios de servidor proxy y equilibrador de cargaProxy server and load balancer scenarios

El middleware de integración con IIS, que configura el software intermedio de encabezados reenviados, y el módulo de ASP.NET Core están configurados para reenviar el esquema (HTTP/HTTPS) y la dirección IP remota donde se originó la solicitud.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Podría ser necesario realizar una configuración adicional para las aplicaciones hospedadas detrás de servidores proxy y equilibradores de carga adicionales.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Para más información, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Archivo web.configweb.config file

El archivo web.config configura el módulo ASP.NET Core.The web.config file configures the ASP.NET Core Module. La creación, transformación y publicación del archivo web.config se controla por medio de un destino de MSBuild (_TransformWebConfig) cuando el proyecto se publica.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Este destino está incluido entre los destinos del SDK web (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). El SDK se establece al inicio del archivo del proyecto:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Si el proyecto no incluye un archivo web.config, el archivo se crea con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Si el proyecto incluye un archivo web.config, el archivo se transforma con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. La transformación no modifica los valores de configuración de IIS del archivo.The transformation doesn't modify IIS configuration settings in the file.

El archivo web.config puede proporcionar valores de configuración de IIS adicionales que controlan los módulos activos de IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Para información sobre los módulos de IIS que son capaces de procesar las solicitudes con aplicaciones ASP.NET Core, vea el tema Módulos IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Para evitar que el SDK web transforme el archivo web.config, use la propiedad <IsTransformWebConfigDisabled> en el archivo del proyecto:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Al deshabilitar el SDK web para la transformación del archivo, el desarrollador debe establecer el elemento processPath y los argumentos manualmente.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.

Ubicación del archivo web.configweb.config file location

Para configurar el módulo ASP.NET correctamente, el archivo web.config debe estar presente en la ruta raíz de contenido (normalmente la ruta de acceso base de la aplicación) de la aplicación implementada.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Se trata de la misma ubicación que la ruta de acceso física del sitio web proporcionada a IIS.This is the same location as the website physical path provided to IIS. El archivo web.config debe estar en la raíz de la aplicación para habilitar la publicación de varias aplicaciones mediante Web Deploy.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Los archivos confidenciales están en la ruta de acceso física de la aplicación, como <ensamblado>.runtimeconfig.json, <ensamblado>.xml (comentarios de documentación XML) y <ensamblado>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Si el archivo web.config está presente y el sitio se inicia normalmente, IIS no facilita estos archivos confidenciales, en el caso de que se soliciten.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Si el archivo web.config no está presente, se le asignó un nombre incorrecto o no se puede configurar el sitio para un inicio normal, IIS puede servir archivos confidenciales públicamente.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

El archivo web.config debe estar presente en la implementación en todo momento, se le debe asignar un nombre correcto y debe ser capaz de configurar el sitio para el inicio normal. Nunca quite el archivo web.config de una implementación de producción.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformación de web.configTransform web.config

Si necesita transformar web.config al realizar la publicación (por ejemplo, establecer variables de entorno basadas en la configuración, el perfil o el entorno), consulte Transformación de web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformación de web.config.

Configuración de IISIIS configuration

Sistemas operativos de servidor WindowsWindows Server operating systems

Habilite el rol de servidor Servidor web (IIS) y establezca los servicios de rol.Enable the Web Server (IIS) server role and establish role services.

  1. Use el asistente Agregar roles y características del menú Administrar o el vínculo de Administrador del servidor.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. En el paso Roles de servidor, active la casilla de Servidor web (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    El rol Servidor web (IIS) se activa en el paso Seleccionar roles de servidor.

  2. Después del paso Características, el paso Servicios de rol se carga para el servidor Web (IIS).After the Features step, the Role services step loads for Web Server (IIS). Seleccione los servicios de rol IIS que quiera o acepte los servicios de rol predeterminados proporcionados.Select the IIS role services desired or accept the default role services provided.

    Los servicios de rol predeterminados se activan en el paso Seleccionar servicios de rol.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servidor web > Seguridad.To enable Windows Authentication, expand the following nodes: Web Server > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servidor web > Desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: Web Server > Application Development. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  3. Continúe con el paso Confirmación para instalar el rol y los servicios de servidor web.Proceed through the Confirmation step to install the web server role and services. No es necesario reiniciar el servidor ni IIS después de instalar el rol Servidor web (IIS) .A server/IIS restart isn't required after installing the Web Server (IIS) role.

Sistemas operativos de escritorio WindowsWindows desktop operating systems

Habilite Consola de administración de IIS y Servicios World Wide Web.Enable the IIS Management Console and World Wide Web Services.

  1. Vaya a Panel de control > Programas > Programas y características > Activar o desactivar las características de Windows (lado izquierdo de la pantalla).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Abra el nodo Internet Information Services.Open the Internet Information Services node. Abra el nodo Herramientas de administración web.Open the Web Management Tools node.

  3. Active la casilla de Consola de administración de IIS.Check the box for IIS Management Console.

  4. Active la casilla de Servicios World Wide Web.Check the box for World Wide Web Services.

  5. Acepte las características predeterminadas de Servicios World Wide Web o personalice las características de IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servicios World Wide Web > Seguridad.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servicios World Wide Web > Características de desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  6. Si la instalación de IIS requiere un reinicio, reinicie el sistema.If the IIS installation requires a restart, restart the system.

Consola de administración de IIS y Servicios World Wide Web se activan en Características de Windows.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Instale el conjunto de hospedaje de .NET Core en el sistema de hospedaje.Install the .NET Core Hosting Bundle on the hosting system. El lote instala .NET Core Runtime, .NET Core Library y el módulo ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. El módulo permite que las aplicaciones ASP.NET Core se ejecuten detrás de IIS.The module allows ASP.NET Core apps to run behind IIS.

Importante

Si el conjunto de hospedaje se instala antes que IIS, se debe reparar la instalación de dicho conjunto.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Vuelva a ejecutar el instalador del conjunto de hospedaje después de instalar IIS.Run the Hosting Bundle installer again after installing IIS.

Si el conjunto de hospedaje se instala después de hacer lo propio con la versión de 64 bits (x64) de .NET Core, es posible que los SDK no estén disponibles (No se ha detectado ningún SDK de .NET Core).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Para resolver el problema, consulte Solución de problemas y depuración de proyectos de ASP.NET Core.To resolve the problem, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Descarga directa (versión actual)Direct download (current version)

Descargue al instalador mediante el vínculo siguiente:Download the installer using the following link:

Instalador del conjunto de hospedaje de .NET Core actual (descarga directa)Current .NET Core Hosting Bundle installer (direct download)

Versiones anteriores del instaladorEarlier versions of the installer

Para obtener una versión anterior del instalador:To obtain an earlier version of the installer:

  1. Vaya a la página Descarga de .NET Core.Navigate to the Download .NET Core page.
  2. Haga clic en la versión de .NET Core que necesite.Click on the desired .NET Core version.
  3. En la columna Run apps - Runtime (Ejecutar aplicaciones - Runtime), busque la fila de la versión del runtime de .NET Core que quiera instalar.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Descargue el instalador mediante el vínculo Runtime & Hosting Bundle (Runtime y conjunto de hospedaje).Download the installer using the Runtime & Hosting Bundle link.

Advertencia

Algunos instaladores contienen versiones que han alcanzado el final del ciclo de vida (EOL) y ya no son compatibles con Microsoft.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Para obtener más información, consulte la política de soporte técnico.For more information, see the support policy.

Instalación del conjunto de hospedajeInstall the Hosting Bundle

  1. Ejecute el instalador en el servidor.Run the installer on the server. Los parámetros siguientes están disponibles cuando se ejecuta el instalador desde un shell de comandos de administrador:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: omite la instalación del módulo de ASP.NET Core.OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: omite la instalación del entorno de ejecución de .NET Core.OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime. Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: omite la instalación del marco compartido de ASP.NET (entorno de ejecución de ASP.NET).OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1 – omite la instalación de entornos de ejecución x86.OPT_NO_X86=1 – Skip installing x86 runtimes. Utilice este parámetro cuando sepa que no va a hospedar aplicaciones de 32 bits.Use this parameter when you know that you won't be hosting 32-bit apps. Si hay alguna posibilidad de que vaya a hospedar aplicaciones de 32 bits y 64 bits en el futuro, no use este parámetro e instale ambos entornos de ejecución.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: deshabilita la comprobación para usar una configuración compartida de IIS cuando la configuración compartida (applicationHost.config) esté en la misma máquina que la instalación de IIS.OPT_NO_SHARED_CONFIG_CHECK=1 – Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Solo disponible para ASP.NET Core 2.2 o instaladores del conjunto de hospedaje posteriores.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.
  2. Reinicie el sistema o ejecute los comandos siguientes en un shell de comandos:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Al reiniciar IIS, se recoge un cambio en la variable PATH del sistema, que es una variable de entorno, realizado por el programa de instalación.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

No es necesario detener manualmente los sitios individuales en IIS al instalar el conjunto de hospedaje.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. Las aplicaciones hospedadas (sitios de IIS) se reinician cuando IIS se reinicia.Hosted apps (IIS sites) restart when IIS restarts. Las aplicaciones se inician de nuevo cuando reciben su primera solicitud, incluso desde el módulo de inicialización de la aplicación.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core adopta el comportamiento de puesta al día para las versiones de revisión de los paquetes de marco compartidos.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. Cuando las aplicaciones hospedadas por IIS se reinician con IIS, las aplicaciones se cargan con las versiones de revisión más recientes de los paquetes a los que se hace referencia cuando reciben su primera solicitud.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. Si IIS no se reinicia, las aplicaciones se reinician y muestran el comportamiento de la puesta al día cuando se reciclan sus procesos de trabajo y reciben su primera solicitud.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

Nota

Para obtener información sobre la configuración compartida de IIS, vea ASP.NET Core Module with IIS Shared Configuration (Módulo de ASP.NET Core con configuración compartida de IIS).For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Instalación de Web Deploy al publicar con Visual StudioInstall Web Deploy when publishing with Visual Studio

Al implementar aplicaciones en servidores con Web Deploy, instale la versión más reciente de Web Deploy en el servidor.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Para instalar Web Deploy, use el Instalador de plataforma web (WebPI) u obtenga un instalador directamente desde el Centro de descarga de Microsoft.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. El método preferido es usar WebPI.The preferred method is to use WebPI. WebPI ofrece una instalación independiente y una configuración para los proveedores de hospedaje.WebPI offers a standalone setup and a configuration for hosting providers.

Creación del sitio de IISCreate the IIS site

  1. En el sistema de hospedaje, cree una carpeta para que contenga los archivos y las carpetas publicados de la aplicación.On the hosting system, create a folder to contain the app's published folders and files. En un paso posterior, la ruta de acceso de la carpeta se proporciona a IIS como la ruta de acceso física a la aplicación.In a following step, the folder's path is provided to IIS as the physical path to the app. Para obtener más información sobre el diseño de carpetas y archivos de implementación de una aplicación, consulte Estructura de directorios de ASP.NET Core.For more information on an app's deployment folder and file layout, see Estructura de directorios de ASP.NET Core.

  2. En Administrador de IIS, abra el nodo del servidor en el panel Conexiones.In IIS Manager, open the server's node in the Connections panel. Haga clic con el botón derecho en la carpeta Sitios.Right-click the Sites folder. Haga clic en Agregar sitio web en el menú contextual.Select Add Website from the contextual menu.

  3. Proporcione el Nombre del sitio y establezca la Ruta de acceso física a la carpeta de implementación de la aplicación.Provide a Site name and set the Physical path to the app's deployment folder. Proporcione la configuración de Enlace y cree el sitio web seleccionando Aceptar:Provide the Binding configuration and create the website by selecting OK:

    Proporcione el nombre del sitio, la ruta de acceso física y el nombre de host en el paso Agregar sitio web.

    Advertencia

    Los enlaces de carácter comodín de nivel superior (http://*:80/ y http://+:80) no se deben usar.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Los enlaces de carácter comodín de nivel superior pueden exponer su aplicación a vulnerabilidades de seguridad.Top-level wildcard bindings can open up your app to security vulnerabilities. Esto se aplica tanto a los caracteres comodín fuertes como a los débiles.This applies to both strong and weak wildcards. Use nombres de host explícitos en lugar de caracteres comodín.Use explicit host names rather than wildcards. Los enlaces de carácter comodín de subdominio (por ejemplo, *.mysub.com) no suponen este riesgo de seguridad si se controla todo el dominio primario (a diferencia de *.com, que sí es vulnerable).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vea la sección 5.4 de RFC 7230 para obtener más información.See rfc7230 section-5.4 for more information.

  4. En el nodo del servidor, seleccione Grupos de aplicaciones.Under the server's node, select Application Pools.

  5. Haga clic con el botón derecho en el grupo de aplicaciones del sitio y seleccione Configuración básica en el menú contextual.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. En la ventana Modificar grupo de aplicaciones, establezca Versión de .NET CLR en Sin código administrado:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Establezca Sin código administrado para Versión de .NET CLR.

    ASP.NET Core se ejecuta en un proceso independiente y administra el runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core no se basa en la carga de CLR de escritorio (.NET CLR); Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. El establecimiento de Versión de .NET CLR en Sin código administrado es opcional, pero no es lo recomendable.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 o posterior: en el caso de las implementaciones independientes de 64 bits (x64) en las que se use un modelo de hospedaje en proceso, deshabilite el grupo de aplicaciones de los procesos de 32 bits (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    En la barra lateral Acciones de la sección Grupos de aplicaciones de Administrador de IIS, seleccione Establecer valores predeterminados de grupos de aplicaciones o Configuración avanzada.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Busque la opción Habilitar aplicaciones de 32 bits y establezca el valor en False.Locate Enable 32-Bit Applications and set the value to False. Las aplicaciones implementadas para un hospedaje fuera de proceso no se ven afectadas por este ajuste.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Confirme que la identidad del modelo de proceso tiene los permisos adecuados.Confirm the process model identity has the proper permissions.

    Si cambia la identidad predeterminada del grupo de aplicaciones (Modelo de proceso > Identidad) de ApplicationPoolIdentity a otra identidad, compruebe que la nueva identidad tenga los permisos necesarios para obtener acceso a la carpeta de la aplicación, la base de datos y otros recursos necesarios.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Por ejemplo, el grupo de aplicaciones requiere acceso de lectura y escritura a las carpetas donde la aplicación lee y escribe archivos.For example, the app pool requires read and write access to folders where the app reads and writes files.

Configuración de la autenticación de Windows (opcional)Windows Authentication configuration (Optional)
Para más información, consulte Configurar la autenticación de Windows.For more information, see Configure Windows authentication.

Implementación de la aplicaciónDeploy the app

Implemente la aplicación en la carpeta Ruta de acceso física de IIS que se creó en la sección Creación del sitio de IIS.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy es el mecanismo recomendado para la implementación, pero existen varias opciones para mover la aplicación desde la carpeta publicar del proyecto a la carpeta de implementación del sistema host.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy con Visual StudioWeb Deploy with Visual Studio

Vea el tema Visual Studio publish profiles for ASP.NET Core app deployment (Perfiles de publicación de Visual Studio para la implementación de aplicaciones de ASP.NET Core) para obtener más información sobre cómo crear un perfil de publicación para su uso con Web Deploy.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Si el proveedor de hospedaje proporciona un perfil de publicación o permite crear uno, descargue su perfil e impórtelo mediante el cuadro de diálogo Publicar de Visual Studio:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Cuadro de diálogo Publicar

Web Deploy fuera de Visual StudioWeb Deploy outside of Visual Studio

También puede usar Web Deploy fuera de Visual Studio desde la línea de comandos.Web Deploy can also be used outside of Visual Studio from the command line. Para más información, vea Web Deployment Tool (Herramienta de implementación web).For more information, see Web Deployment Tool.

Alternativas a Web DeployAlternatives to Web Deploy

Use cualquiera de los métodos disponibles para mover la aplicación al sistema de hospedaje, como copia manual, Xcopy, Robocopy o PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Para obtener más información sobre ASP.NET Core en IIS, vea la sección Recursos de implementación para administradores de IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Examinar el sitio webBrowse the website

Cuando la aplicación esté implementada en el sistema de hospedaje, realice una solicitud a uno de los puntos de conexión públicos de la aplicación.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

En el ejemplo siguiente, el sitio se enlaza a un Nombre de host de IIS de www.mysite.com en el Puerto 80.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Se realiza una solicitud a http://www.mysite.com:A request is made to http://www.mysite.com:

El explorador Microsoft Edge ha cargado la página de inicio de IIS.

Archivos de implementación bloqueadosLocked deployment files

Los archivos de la carpeta de implementación se bloquean cuando se ejecuta la aplicación.Files in the deployment folder are locked when the app is running. Los archivos bloqueados no se pueden sobrescribir durante la implementación.Locked files can't be overwritten during deployment. Para liberar archivos bloqueados de una implementación, detenga el grupo de aplicaciones mediante uno de los enfoques siguientes:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Use Web Deploy con una referencia a Microsoft.NET.Sdk.Web en el archivo de proyecto.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Se coloca un archivo app_offline.htm en la raíz del directorio de aplicación web.An app_offline.htm file is placed at the root of the web app directory. Cuando el archivo está presente, el módulo de ASP.NET Core cierra correctamente la aplicación y proporciona el archivo app_offline.htm durante la implementación.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Para más información, vea ASP.NET Core Module configuration reference (Referencia de configuración del módulo de ASP.NET Core).For more information, see the ASP.NET Core Module configuration reference.

  • Detenga manualmente el grupo de aplicaciones en el Administrador de IIS en el servidor.Manually stop the app pool in the IIS Manager on the server.

  • Utilice PowerShell para colocar app_offline.htm (es necesario PowerShell 5 o una versión posterior):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Protección de datosData protection

La pila de protección de datos de ASP.NET Core la usan varios middlewares de ASP.NET Core, incluidos los que se emplean en la autenticación.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Aunque el código de usuario no llame a las API de protección de datos, la protección de datos se debe configurar con un script de implementación o en el código de usuario para crear un almacén de claves criptográficas persistente.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Si no se configura la protección de datos, las claves se conservan en memoria y se descartan cuando se reinicia la aplicación.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Si el conjunto de claves se almacena en memoria cuando se reinicia la aplicación:If the key ring is stored in memory when the app restarts:

  • Todos los tokens de autenticación basados en cookies se invalidan.All cookie-based authentication tokens are invalidated.
  • Los usuarios tienen que iniciar sesión de nuevo en la siguiente solicitud.Users are required to sign in again on their next request.
  • Ya no se pueden descifrar los datos protegidos con el conjunto de claves.Any data protected with the key ring can no longer be decrypted. Esto puede incluir tokens CSRF y cookies de TempData de ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Para configurar la protección de datos en IIS para conservar el conjunto de claves, use uno de los enfoques siguientes:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Crear claves del Registro de protección de datosCreate Data Protection Registry Keys

    Las claves de protección de datos que las aplicaciones de ASP.NET usan se almacenan en el Registro externo a las aplicaciones.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Para conservar las claves de una determinada aplicación, cree claves del Registro para el grupo de aplicaciones.To persist the keys for a given app, create registry keys for the app pool.

    En las instalaciones independientes de IIS que no son de granja de servidores web, puede usar el script de PowerShell Provision-AutoGenKeys.ps1 de protección de datos para cada grupo de aplicaciones usado con una aplicación de ASP.NET Core.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Este script crea una clave del Registro en el registro HKLM que solo es accesible a la cuenta de proceso de trabajo del grupo de aplicaciones de la aplicación.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Las claves se cifran en reposo mediante DPAPI con una clave de equipo.Keys are encrypted at rest using DPAPI with a machine-wide key.

    En escenarios de granja de servidores web, una aplicación puede configurarse para usar una ruta de acceso UNC para almacenar su conjunto de claves de protección de datos.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. De forma predeterminada, las claves de protección de datos no se cifran.By default, the data protection keys aren't encrypted. Asegúrese de que los permisos de archivo de un recurso compartido de red se limitan a la cuenta de Windows bajo la que se ejecuta la aplicación.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Puede usar un certificado X509 para proteger las claves en reposo.An X509 certificate can be used to protect keys at rest. Considere un mecanismo que permita a los usuarios cargar certificados: coloque los certificados en el almacén de certificados de confianza del usuario y asegúrese de que están disponibles en todos los equipos en los que se ejecuta la aplicación del usuario.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Vea Configurar la protección de datos en ASP.NET Core para más información.See Configure ASP.NET Core Data Protection for details.

  • Configurar el grupo de aplicaciones de IIS para cargar el perfil de usuarioConfigure the IIS Application Pool to load the user profile

    Esta opción está en la sección Modelo de proceso, en la Configuración avanzada del grupo de aplicaciones.This setting is in the Process Model section under the Advanced Settings for the app pool. Establezca Cargar perfil de usuario en True.Set Load User Profile to True. Cuando se establece en True, las claves se almacenan en el directorio del perfil de usuario y se protegen mediante DPAPI con una clave específica de la cuenta de usuario.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Las claves se conservan en la carpeta %HOME%\ASP.NET\DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    También se debe habilitar el atributo setProfileEnvironment del grupo de aplicaciones.The app pool's setProfileEnvironment attribute must also be enabled. El valor predeterminado de setProfileEnvironment es true.The default value of setProfileEnvironment is true. En algunos escenarios (por ejemplo, SO Windows), setProfileEnvironment está establecido en false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Si las claves no se almacenan en el directorio del perfil de usuario como se esperaba:If keys aren't stored in the user profile directory as expected:

    1. Vaya a la carpeta %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Abra el archivo applicationHost.config.Open the applicationHost.config file.
    3. Busque el elemento <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Confirme que el atributo setProfileEnvironment no está presente, que adopta de forma predeterminada el valor true, o establezca explícitamente el valor del atributo en true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Usar el sistema de archivos como un almacén de conjunto de clavesUse the file system as a key ring store

    Ajuste el código de la aplicación para usar el sistema de archivos como un almacén de conjunto de claves.Adjust the app code to use the file system as a key ring store. Use un certificado X509 para proteger el conjunto de claves y asegúrese de que sea un certificado de confianza.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Si es un certificado autofirmado, colóquelo en el almacén raíz de confianza.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Cuando se usa IIS en una granja de servidores web:When using IIS in a web farm:

    • Use un recurso compartido de archivos al que puedan acceder todos los equipos.Use a file share that all machines can access.
    • Implemente un certificado X509 en cada equipo.Deploy an X509 certificate to each machine. Configure la protección de datos en el código.Configure data protection in code.
  • Establecer una directiva para todo el equipo para la protección de datosSet a machine-wide policy for data protection

    El sistema de protección de datos tiene compatibilidad limitada con el establecimiento de una directiva de equipo predeterminada para todas las aplicaciones que usan las API de protección de datos.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Para obtener más información, vea ASP.NET Core protección de datos.For more information, see ASP.NET Core protección de datos.

Directorios virtualesVirtual Directories

Los directorios virtuales de IIS no son compatibles con aplicaciones ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Una aplicación puede hospedarse como subaplicación.An app can be hosted as a sub-application.

SubaplicacionesSub-applications

Se puede hospedar una aplicación ASP.NET Core como una subaplicación IIS.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). La ruta de acceso de la subaplicación se convierte en parte de la dirección URL de la aplicación raíz.The sub-app's path becomes part of the root app's URL.

Los vínculos a los recursos estáticos dentro de la aplicación secundaria deben utilizar una notación de una tilde con una barra diagonal (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. La notación de tilde barra diagonal desencadena un asistente de etiquetas para anteponer la ruta de acceso de la aplicación secundaria al vínculo relativo representado.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Para una aplicación secundaria en /subapp_path, una imagen vinculada con src="~/image.png" se representa como src="/subapp_path/image.png".For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". El middleware de archivos estáticos de la aplicación raíz no procesa la solicitud de archivo estático.The root app's Static File Middleware doesn't process the static file request. La solicitud se procesa mediante el middleware de archivos estáticos de la aplicación secundaria.The request is processed by the sub-app's Static File Middleware.

Si el atributo src de un recurso estático se establece en una ruta de acceso absoluta (por ejemplo, src="/image.png"), el vínculo se representa sin la base de la ruta de acceso de la aplicación secundaria.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. El middleware de archivos estáticos de la aplicación raíz intenta atender al recurso desde el web root, lo que resulta en una respuesta 404 - No encontrado a menos que el recurso estático esté disponible desde la aplicación raíz.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

Para hospedar una aplicación ASP.NET Core como aplicación secundaria en otra aplicación ASP.NET Core:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Establezca un grupo de aplicaciones para la aplicación secundaria.Establish an app pool for the sub-app. Establezca Versión de .NET CLR en Sin código administrado porque Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo, no el CLR de escritorio (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Agregue el sitio raíz en el Administrador de IIS con la aplicación secundaria en una carpeta en el sitio raíz.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Haga clic con el botón derecho en la carpeta de la aplicación secundaria en el Administrador de IIS y seleccione Convertir en aplicación.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. En el cuadro de diálogo Agregar aplicación, use el botón Seleccionar en Grupo de aplicaciones para asignar el grupo de aplicaciones que ha creado para la aplicación secundaria.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Seleccione Aceptar.Select OK.

La asignación de un grupo de aplicaciones independiente de la aplicación secundaria es un requisito cuando se utiliza el modelo de hospedaje en proceso.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Para más información sobre el modelo de hospedaje en proceso y cómo configurar el módulo de ASP.NET Core, consulte Módulo ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Módulo ASP.NET Core.

Configuración de IIS con web.configConfiguration of IIS with web.config

En escenarios de IIS que son funcionales para aplicaciones ASP.NET Core con el módulo ASP.NET Core, la configuración de IIS está influenciada por la sección <system.webServer> de web.config.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Por ejemplo, la configuración de IIS es funcional para la compresión dinámica.For example, IIS configuration is functional for dynamic compression. Si IIS está configurado en el nivel de servidor para usar compresión dinámica, el elemento <urlCompression> del archivo web.config de la aplicación puede deshabilitarlo para una aplicación ASP.NET Core.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Para obtener más información, vea los temas siguientes:For more information, see the following topics:

Para establecer variables de entorno para aplicaciones individuales que se ejecutan en grupos de aplicaciones aislados (se admite para IIS 10.0 o posterior), vea la sección AppCmd.exe command (Comando AppCmd.exe) del tema Environment Variables <environmentVariables> (Variables de entorno ) de la documentación de referencia de IIS.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Secciones de configuración de web.configConfiguration sections of web.config

Las aplicaciones ASP.NET Core no usan las secciones de configuración de aplicaciones ASP.NET 4.x en web.config para la configuración:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Las aplicaciones de ASP.NET Core se configuran mediante otros proveedores de configuración.ASP.NET Core apps are configured using other configuration providers. Para obtener más información, vea Configuración.For more information, see Configuration.

Grupos de aplicacionesApplication Pools

El aislamiento de los grupos de aplicaciones se determinan mediante el modelo de hospedaje:App pool isolation is determined by the hosting model:

  • Hospedaje dentro de proceso: es necesario que las aplicaciones se ejecuten en grupos de aplicaciones distintos.In-process hosting – Apps are required to run in separate app pools.
  • Hospedaje fuera de proceso: nuestra recomendación es aislar las aplicaciones entre sí ejecutándolas en su propio grupo de aplicaciones.Out-of-process hosting – We recommend isolating the apps from each other by running each app in its own app pool.

El valor predeterminado del cuadro de diálogo Agregar sitio web de IIS es un único grupo de aplicaciones por aplicación.The IIS Add Website dialog defaults to a single app pool per app. Cuando se proporciona el Nombre del sitio, el texto se transfiere automáticamente al cuadro de texto Grupo de aplicaciones.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Al agregar el sitio se crea un grupo de aplicaciones con el nombre del sitio.A new app pool is created using the site name when the site is added.

Identidad del grupo de aplicacionesApplication Pool Identity

Una cuenta de identidad del grupo de aplicaciones permite ejecutar una aplicación en una cuenta única sin tener que crear ni administrar dominios o cuentas locales.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. En IIS 8.0 o versiones posteriores, el proceso de trabajo de administración de IIS (WAS) crea una cuenta virtual con el nombre del nuevo grupo de aplicaciones y ejecuta los procesos de trabajo del grupo de aplicaciones en esta cuenta de forma predeterminada.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. En la Consola de administración de IIS, en la opción Configuración avanzada del grupo de aplicaciones, asegúrese de que la Identidad está establecida para usar ApplicationPoolIdentity:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Cuadro de diálogo Configuración avanzada del grupo de aplicaciones

El proceso de administración de IIS crea un identificador seguro con el nombre del grupo de aplicaciones en el sistema de seguridad de Windows.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Los recursos se pueden proteger mediante esta identidad.Resources can be secured using this identity. Sin embargo, no es una cuenta de usuario real ni se muestra en la consola de administración de usuario de Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Si el proceso de trabajo de IIS requiere acceso con privilegios elevados a la aplicación, modifique la lista de control de acceso (ACL) del directorio que contiene la aplicación:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Abra el Explorador de Windows y vaya al directorio.Open Windows Explorer and navigate to the directory.

  2. Haga clic con el botón derecho en el directorio y seleccione Propiedades.Right-click on the directory and select Properties.

  3. En la pestaña Seguridad, haga clic en el botón Editar y en el botón Agregar.Under the Security tab, select the Edit button and then the Add button.

  4. Haga clic en el botón Ubicaciones y asegúrese de seleccionar el sistema.Select the Locations button and make sure the system is selected.

  5. Escriba IIS AppPool\<nombre_del_grupo_de_aplicaciones> en el área Escribir los nombres de objeto para seleccionar.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Haga clic en el botón Comprobar nombres.Select the Check Names button. Para DefaultAppPool compruebe los nombres con IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Cuando el botón Comprobar nombres está seleccionado, un valor de DefaultAppPool se indica en el área de los nombres de objeto.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. No es posible escribir el nombre del grupo de aplicaciones directamente en el área de los nombres de objeto.It isn't possible to enter the app pool name directly into the object names area. Use el formato IIS AppPool\<nombre_del_grupo_de_aplicaciones> cuando compruebe el nombre del objeto.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: el nombre del grupo de aplicaciones de "DefaultAppPool" se anexa al "IIS AppPool" en el área de los nombres de objeto antes de seleccionar "Comprobar nombres".

  6. Seleccione Aceptar.Select OK.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: después de seleccionar "Comprobar nombres", el nombre del objeto "DefaultAppPool" se muestra en el área de los nombres de objeto.

  7. Los permisos de lectura y ejecución se deben conceder de forma predeterminada.Read & execute permissions should be granted by default. Proporcione permisos adicionales según sea necesario.Provide additional permissions as needed.

El acceso también se puede conceder mediante un símbolo del sistema con la herramienta ICACLS.Access can also be granted at a command prompt using the ICACLS tool. En el siguiente comando se usa DefaultAppPool como ejemplo:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Para más información, consulte el tema icacls.For more information, see the icacls topic.

Compatibilidad con HTTP/2HTTP/2 support

HTTP/2 es compatible con ASP.NET Core en los escenarios de implementación de IIS siguientes:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • En procesoIn-process
    • Windows Server 2016/Windows 10 o posterior; IIS 10 o posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Conexión con TLS 1.2 o una versión posteriorTLS 1.2 or later connection
  • Fuera de procesoOut-of-process
    • Windows Server 2016/Windows 10 o posterior; IIS 10 o posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Las conexiones de servidor perimetral de acceso público usan HTTP/2, pero la conexión de proxy inverso al servidor de Kestrel usa HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • Conexión con TLS 1.2 o una versión posteriorTLS 1.2 or later connection

Para una implementación en proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol notifica HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. Para una implementación fuera de proceso cuando se establece una conexión HTTP/2, HttpRequest.Protocol notifica HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Para obtener más información sobre los modelos de hospedaje en proceso y fuera de proceso, consulte Módulo ASP.NET Core.For more information on the in-process and out-of-process hosting models, see Módulo ASP.NET Core.

HTTP/2 está habilitado de forma predeterminada.HTTP/2 is enabled by default. Las conexiones vuelven a HTTP/1.1 si no se establece una conexión HTTP/2.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Para más información sobre la configuración HTTP/2 con implementaciones de IIS, vea HTTP/2 en IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Solicitudes CORS de preflightCORS preflight requests

Esta sección solo se aplica a las aplicaciones de ASP.NET Core que tienen como destino .NET Framework.This section only applies to ASP.NET Core apps that target the .NET Framework.

Para una aplicación de ASP.NET Core que tiene como destino .NET Framework, las solicitudes OPTIONS no se pasan a la aplicación de forma predeterminada en IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Para obtener información sobre cómo configurar los controladores de IIS de la aplicación en web.config para pasar las solicitudes OPTIONS, consulte Habilitar solicitudes entre orígenes en ASP.NET Web API 2: Cómo funciona la CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Módulo de inicialización de aplicaciones y tiempo de espera de inactividadApplication Initialization Module and Idle Timeout

Cuando se hospeda en IIS mediante la versión 2 del módulo de ASP.NET Core:When hosted in IIS by the ASP.NET Core Module version 2:

Módulo de inicialización de aplicacionesApplication Initialization Module

Se aplica a las aplicaciones hospedadas dentro de proceso y fuera de proceso.Applies to apps hosted in-process and out-of-process.

Inicialización de aplicaciones de IIS es una característica de IIS que envía una solicitud HTTP a la aplicación al iniciarse o reciclarse el grupo de aplicaciones.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. La solicitud desencadena el inicio de la aplicación.The request triggers the app to start. De forma predeterminada, IIS emite una solicitud a la dirección URL raíz de la aplicación (/) para inicializar esta (consulte los recursos adicionales para más detalles sobre la configuración).By default, IIS issues a request to the app's root URL (/) to initialize the app (see the additional resources for more details on configuration).

Confirme que la característica de rol Inicialización de aplicaciones de IIS está habilitada:Confirm that the IIS Application Initialization role feature in enabled:

En Windows 7 o sistemas de escritorio posteriores cuando se usa IIS localmente:On Windows 7 or later desktop systems when using IIS locally:

  1. Vaya a Panel de control > Programas > Programas y características > Activar o desactivar las características de Windows (lado izquierdo de la pantalla).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Abra Internet Information Services > Servicios World Wide Web > Características de desarrollo de aplicaciones.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Active la casilla de Inicialización de aplicaciones.Select the check box for Application Initialization.

En Windows Server 2008 R2 o posterior:On Windows Server 2008 R2 or later:

  1. Abra el Asistente para agregar roles y características.Open the Add Roles and Features Wizard.
  2. En el panel Seleccionar servicios de rol, abra el nodo Desarrollo de aplicaciones.In the Select role services panel, open the Application Development node.
  3. Active la casilla de Inicialización de aplicaciones.Select the check box for Application Initialization.

Use cualquiera de los enfoques siguientes para habilitar el módulo de inicialización de aplicaciones para el sitio:Use either of the following approaches to enable the Application Initialization Module for the site:

  • Mediante el Administrador de IIS:Using IIS Manager:

    1. Seleccione Grupos de aplicaciones en el panel Conexiones.Select Application Pools in the Connections panel.
    2. Haga clic con el botón derecho en el grupo de aplicaciones de la aplicación en la lista y seleccione Configuración avanzada.Right-click the app's app pool in the list and select Advanced Settings.
    3. El valor predeterminado de Modo de inicio es OnDemand.The default Start Mode is OnDemand. Establezca Modo de inicio en AlwaysRunning.Set the Start Mode to AlwaysRunning. Seleccione Aceptar.Select OK.
    4. Abra el nodo Sitios en el panel Conexiones.Open the Sites node in the Connections panel.
    5. Haga clic con el botón derecho en la aplicación y seleccione Administrar sitio web > Configuración avanzada.Right-click the app and select Manage Website > Advanced Settings.
    6. El valor predeterminado de Carga previa activada es False.The default Preload Enabled setting is False. Establezca Carga previa activada en True.Set Preload Enabled to True. Seleccione Aceptar.Select OK.
  • Mediante web.config, agregue el elemento <applicationInitialization> con doAppInitAfterRestart establecido en true a los elementos <system.webServer> del archivo web.config de la aplicación:Using web.config, add the <applicationInitialization> element with doAppInitAfterRestart set to true to the <system.webServer> elements in the app's web.config file:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <location path="." inheritInChildApplications="false">
        <system.webServer>
          <applicationInitialization doAppInitAfterRestart="true" />
        </system.webServer>
      </location>
    </configuration>
    

Tiempo de espera de inactividadIdle Timeout

Solo se aplica a las aplicaciones hospedadas dentro de proceso.Only applies to apps hosted in-process.

Para evitar la inactividad en la aplicación, establezca el tiempo de espera de inactividad del grupo de aplicaciones mediante el Administrador de IIS:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Seleccione Grupos de aplicaciones en el panel Conexiones.Select Application Pools in the Connections panel.
  2. Haga clic con el botón derecho en el grupo de aplicaciones de la aplicación en la lista y seleccione Configuración avanzada.Right-click the app's app pool in the list and select Advanced Settings.
  3. El valor predeterminado de Tiempo de inactividad (minutos) es 20 minutos.The default Idle Time-out (minutes) is 20 minutes. Establezca Tiempo de inactividad (minutos) en 0 (cero).Set the Idle Time-out (minutes) to 0 (zero). Seleccione Aceptar.Select OK.
  4. Desactive y vuelva a activar el proceso de trabajo.Recycle the worker process.

Para evitar que las aplicaciones hospedadas fuera de proceso agoten el tiempo de espera, use cualquiera de los enfoques siguientes:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Recursos adicionales del módulo de inicialización de aplicaciones y del tiempo de espera de inactividadApplication Initialization Module and Idle Timeout additional resources

Recursos de implementación para administradores de IISDeployment resources for IIS administrators

Recursos adicionalesAdditional resources

Para obtener una experiencia de tutorial en la publicación de una aplicación de ASP.NET Core en un servidor IIS, vea Publicación de una aplicación ASP.NET Core en IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Publicación de una aplicación ASP.NET Core en IIS.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Sistemas operativos admitidosSupported operating systems

Los siguientes sistemas operativos son compatibles:The following operating systems are supported:

  • Windows 7 o posteriorWindows 7 or later
  • Windows Server 2008 R2 o posteriorWindows Server 2008 R2 or later

El servidor HTTP.sys (anteriormente denominado WebListener) no funciona en una configuración de proxy inverso con IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Use el servidor Kestrel.Use the Kestrel server.

Para obtener información sobre el hospedaje en Azure, vea Implementar aplicaciones de ASP.NET Core en Azure App Service.For information on hosting in Azure, see Implementar aplicaciones de ASP.NET Core en Azure App Service.

Para obtener instrucciones de solución de problemas, vea Solución de problemas y depuración de proyectos de ASP.NET Core.For troubleshooting guidance, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Plataformas compatiblesSupported platforms

Se admiten las aplicaciones publicadas para implementaciones de 32 bits (x86) y 64 bits (x64).Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Implemente una aplicación de 32 bits con un SDK de .NET Core de 32 bits (x86) a menos que la aplicación:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Requiera el espacio de direcciones de memoria virtual más grande disponible para una aplicación de 64 bits.Requires the larger virtual memory address space available to a 64-bit app.
  • Requiera el tamaño de la pila IIS más grande.Requires the larger IIS stack size.
  • Tenga dependencias nativas de 64 bits.Has 64-bit native dependencies.

Use un SDK de .NET Core de 64 bits (x64) para publicar una aplicación de 64 bits.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Debe haber un tiempo de ejecución de 64 bits en el sistema host.A 64-bit runtime must be present on the host system.

ASP.NET Core se distribuye con el servidor Kestrel, un servidor HTTP multiplataforma predeterminado.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

Al usar IIS o IIS Express, la aplicación se ejecuta en un proceso distinto al del proceso de trabajo de IIS (fuera de proceso) con el servidor Kestrel.When using IIS or IIS Express, the app runs in a process separate from the IIS worker process (out-of-process) with the Kestrel server.

Dado que las aplicaciones ASP.NET Core se ejecutan en un proceso independiente del proceso de trabajo de IIS, el módulo se encarga de la administración de procesos.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. 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.The module starts the process for the ASP.NET Core app when the first request arrives and restarts the app if it shuts down or crashes. 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).This is essentially the same behavior as seen with apps that run in-process that are managed by the Windows Process Activation Service (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:The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Módulo ASP.NET Core

Las solicitudes llegan procedentes de Internet al controlador HTTP.sys en modo kernel.Requests arrive from the web to the kernel-mode HTTP.sys driver. El controlador enruta las solicitudes a IIS en el puerto configurado del sitio web, que suele ser el puerto 80 (HTTP) o 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). El módulo reenvía las solicitudes a Kestrel en un puerto aleatorio de la aplicación, que no es ni 80 ni 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

El módulo especifica el puerto a través de la variable de entorno en el inicio, y el middleware de integración de IIS configura el servidor para que escuche en 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}. Se realizan más comprobaciones y se rechazan las solicitudes que no se hayan originado en el módulo.Additional checks are performed, and requests that don't originate from the module are rejected. El módulo no admite el reenvío de HTTPS, por lo que las solicitudes se reenvían a través de HTTP, aunque IIS las reciba a través de HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

Una vez que Kestrel toma la solicitud del módulo, la envía a la canalización de middleware de ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. La canalización de middleware controla la solicitud y la pasa como una instancia de HttpContext a la lógica de la aplicación.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. 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.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. La respuesta de la aplicación se vuelve a pasar a IIS, que la envía de nuevo al cliente HTTP que inició la solicitud.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilder configura el servidor Kestrel como servidor web y habilita IIS Integration mediante la configuración de la ruta de acceso y el puerto base para el módulo ASP.NET Core.CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

El módulo ASP.NET Core genera un puerto dinámico que se asigna al proceso back-end.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilder llama al método UseIISIntegration.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration configura Kestrel para escuchar en el puerto dinámico en la dirección IP de localhost (127.0.0.1).UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). Si el puerto dinámico es 1234, Kestrel escucha en 127.0.0.1:1234.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. Esta configuración reemplaza a otras configuraciones de dirección URL proporcionadas por:This configuration replaces other URL configurations provided by:

No es necesario realizar llamadas a UseUrls o a la API Listen de Kestrel cuando se usa el módulo.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. Si se llama a UseUrls o Listen, Kestrel escucha en el puerto especificado cuando se ejecuta la aplicación sin IIS.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

Para obtener instrucciones sobre la configuración del módulo ASP.NET Core, vea Módulo ASP.NET Core.For ASP.NET Core Module configuration guidance, see Módulo ASP.NET Core.

Para obtener más información sobre el hospedaje, consulte Hospedaje en ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Configuración de aplicaciónApplication configuration

Habilitación de los componentes de integración con IISEnable the IISIntegration components

Al compilar un host en CreateWebHostBuilder (Program.cs), llame a CreateDefaultBuilder para permitir la integración de IIS:When building a host in CreateWebHostBuilder (Program.cs), call CreateDefaultBuilder to enable IIS integration:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        ...

Para más información sobre CreateDefaultBuilder, consulte Host web de ASP.NET Core.For more information on CreateDefaultBuilder, see Host web de ASP.NET Core.

Opciones de IISIIS options

OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el servidor IIS establece el HttpContext.User autenticado mediante la autenticación de Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Si es false, el servidor solo proporciona una identidad para HttpContext.User y responde a los desafíos cuando se le solicita explícitamente mediante el AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para obtener más información, vea Autenticación de Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.

Para configurar las opciones de IIS, incluya una configuración de servicio para IISOptions en ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. En el ejemplo siguiente se impide que la aplicación rellene HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
OpciónOption DefaultDefault ParámetroSetting
AutomaticAuthentication true Si es true, el middleware de integración con IIS establece el HttpContext.User autenticado mediante autenticación de Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. 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.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Autenticación de Windows debe estar habilitado en IIS para que AutomaticAuthentication funcione.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Para más información, consulte el tema Autenticación de Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Establece el nombre para mostrar que se muestra a los usuarios en las páginas de inicio de sesión.Sets the display name shown to users on login pages.
ForwardClientCertificate true Si HttpContext.Connection.ClientCertificate y el encabezado de solicitud true está presente, se rellena MS-ASPNETCORE-CLIENTCERT.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Escenarios de servidor proxy y equilibrador de cargaProxy server and load balancer scenarios

El middleware de integración con IIS, que configura el software intermedio de encabezados reenviados, y el módulo de ASP.NET Core están configurados para reenviar el esquema (HTTP/HTTPS) y la dirección IP remota donde se originó la solicitud.The IIS Integration Middleware, which configures Forwarded Headers Middleware, and the ASP.NET Core Module are configured to forward the scheme (HTTP/HTTPS) and the remote IP address where the request originated. Podría ser necesario realizar una configuración adicional para las aplicaciones hospedadas detrás de servidores proxy y equilibradores de carga adicionales.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Para más información, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Archivo web.configweb.config file

El archivo web.config configura el módulo ASP.NET Core.The web.config file configures the ASP.NET Core Module. La creación, transformación y publicación del archivo web.config se controla por medio de un destino de MSBuild (_TransformWebConfig) cuando el proyecto se publica.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Este destino está incluido entre los destinos del SDK web (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). El SDK se establece al inicio del archivo del proyecto:The SDK is set at the top of the project file:

<Project Sdk="Microsoft.NET.Sdk.Web">

Si el proyecto no incluye un archivo web.config, el archivo se crea con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file isn't present in the project, the file is created with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output.

Si el proyecto incluye un archivo web.config, el archivo se transforma con los elementos processPath y arguments correctos para configurar el módulo ASP.NET Core y se mueve a la salida publicada.If a web.config file is present in the project, the file is transformed with the correct processPath and arguments to configure the ASP.NET Core Module and moved to published output. La transformación no modifica los valores de configuración de IIS del archivo.The transformation doesn't modify IIS configuration settings in the file.

El archivo web.config puede proporcionar valores de configuración de IIS adicionales que controlan los módulos activos de IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Para información sobre los módulos de IIS que son capaces de procesar las solicitudes con aplicaciones ASP.NET Core, vea el tema Módulos IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Para evitar que el SDK web transforme el archivo web.config, use la propiedad <IsTransformWebConfigDisabled> en el archivo del proyecto:To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

Al deshabilitar el SDK web para la transformación del archivo, el desarrollador debe establecer el elemento processPath y los argumentos manualmente.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.

Ubicación del archivo web.configweb.config file location

Para configurar el módulo ASP.NET correctamente, el archivo web.config debe estar presente en la ruta raíz de contenido (normalmente la ruta de acceso base de la aplicación) de la aplicación implementada.In order to set up the ASP.NET Core Module correctly, the web.config file must be present at the content root path (typically the app base path) of the deployed app. Se trata de la misma ubicación que la ruta de acceso física del sitio web proporcionada a IIS.This is the same location as the website physical path provided to IIS. El archivo web.config debe estar en la raíz de la aplicación para habilitar la publicación de varias aplicaciones mediante Web Deploy.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

Los archivos confidenciales están en la ruta de acceso física de la aplicación, como <ensamblado>.runtimeconfig.json, <ensamblado>.xml (comentarios de documentación XML) y <ensamblado>.deps.json.Sensitive files exist on the app's physical path, such as <assembly>.runtimeconfig.json, <assembly>.xml (XML Documentation comments), and <assembly>.deps.json. Si el archivo web.config está presente y el sitio se inicia normalmente, IIS no facilita estos archivos confidenciales, en el caso de que se soliciten.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Si el archivo web.config no está presente, se le asignó un nombre incorrecto o no se puede configurar el sitio para un inicio normal, IIS puede servir archivos confidenciales públicamente.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

El archivo web.config debe estar presente en la implementación en todo momento, se le debe asignar un nombre correcto y debe ser capaz de configurar el sitio para el inicio normal. Nunca quite el archivo web.config de una implementación de producción.The web.config file must be present in the deployment at all times, correctly named, and able to configure the site for normal start up. Never remove the web.config file from a production deployment.

Transformación de web.configTransform web.config

Si necesita transformar web.config al realizar la publicación (por ejemplo, establecer variables de entorno basadas en la configuración, el perfil o el entorno), consulte Transformación de web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Transformación de web.config.

Configuración de IISIIS configuration

Sistemas operativos de servidor WindowsWindows Server operating systems

Habilite el rol de servidor Servidor web (IIS) y establezca los servicios de rol.Enable the Web Server (IIS) server role and establish role services.

  1. Use el asistente Agregar roles y características del menú Administrar o el vínculo de Administrador del servidor.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. En el paso Roles de servidor, active la casilla de Servidor web (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    El rol Servidor web (IIS) se activa en el paso Seleccionar roles de servidor.

  2. Después del paso Características, el paso Servicios de rol se carga para el servidor Web (IIS).After the Features step, the Role services step loads for Web Server (IIS). Seleccione los servicios de rol IIS que quiera o acepte los servicios de rol predeterminados proporcionados.Select the IIS role services desired or accept the default role services provided.

    Los servicios de rol predeterminados se activan en el paso Seleccionar servicios de rol.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servidor web > Seguridad.To enable Windows Authentication, expand the following nodes: Web Server > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servidor web > Desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: Web Server > Application Development. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  3. Continúe con el paso Confirmación para instalar el rol y los servicios de servidor web.Proceed through the Confirmation step to install the web server role and services. No es necesario reiniciar el servidor ni IIS después de instalar el rol Servidor web (IIS) .A server/IIS restart isn't required after installing the Web Server (IIS) role.

Sistemas operativos de escritorio WindowsWindows desktop operating systems

Habilite Consola de administración de IIS y Servicios World Wide Web.Enable the IIS Management Console and World Wide Web Services.

  1. Vaya a Panel de control > Programas > Programas y características > Activar o desactivar las características de Windows (lado izquierdo de la pantalla).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Abra el nodo Internet Information Services.Open the Internet Information Services node. Abra el nodo Herramientas de administración web.Open the Web Management Tools node.

  3. Active la casilla de Consola de administración de IIS.Check the box for IIS Management Console.

  4. Active la casilla de Servicios World Wide Web.Check the box for World Wide Web Services.

  5. Acepte las características predeterminadas de Servicios World Wide Web o personalice las características de IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Autenticación de Windows (opcional)Windows Authentication (Optional)
    Para habilitar Autenticación de Windows, expanda los nodos siguientes: Servicios World Wide Web > Seguridad.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Seleccione la característica Autenticación de Windows.Select the Windows Authentication feature. Para más información, consulte Windows Authentication <windowsAuthentication > (Autenticación de Windows ) y Configure Windows authentication (Configurar la autenticación de Windows).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    WebSockets (opcional)WebSockets (Optional)
    WebSockets es compatible con ASP.NET Core 1.1 o posterior.WebSockets is supported with ASP.NET Core 1.1 or later. Para habilitar WebSockets, expanda los nodos siguientes: Servicios World Wide Web > Características de desarrollo de aplicaciones.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Seleccione la característica Protocolo WebSocket.Select the WebSocket Protocol feature. Para más información, vea WebSockets.For more information, see WebSockets.

  6. Si la instalación de IIS requiere un reinicio, reinicie el sistema.If the IIS installation requires a restart, restart the system.

Consola de administración de IIS y Servicios World Wide Web se activan en Características de Windows.

Instalación del conjunto de hospedaje de .NET CoreInstall the .NET Core Hosting Bundle

Instale el conjunto de hospedaje de .NET Core en el sistema de hospedaje.Install the .NET Core Hosting Bundle on the hosting system. El lote instala .NET Core Runtime, .NET Core Library y el módulo ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. El módulo permite que las aplicaciones ASP.NET Core se ejecuten detrás de IIS.The module allows ASP.NET Core apps to run behind IIS.

Importante

Si el conjunto de hospedaje se instala antes que IIS, se debe reparar la instalación de dicho conjunto.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. Vuelva a ejecutar el instalador del conjunto de hospedaje después de instalar IIS.Run the Hosting Bundle installer again after installing IIS.

Si el conjunto de hospedaje se instala después de hacer lo propio con la versión de 64 bits (x64) de .NET Core, es posible que los SDK no estén disponibles (No se ha detectado ningún SDK de .NET Core).If the Hosting Bundle is installed after installing the 64-bit (x64) version of .NET Core, SDKs might appear to be missing (No .NET Core SDKs were detected). Para resolver el problema, consulte Solución de problemas y depuración de proyectos de ASP.NET Core.To resolve the problem, see Solución de problemas y depuración de proyectos de ASP.NET Core.

Descarga directa (versión actual)Direct download (current version)

Descargue al instalador mediante el vínculo siguiente:Download the installer using the following link:

Instalador del conjunto de hospedaje de .NET Core actual (descarga directa)Current .NET Core Hosting Bundle installer (direct download)

Versiones anteriores del instaladorEarlier versions of the installer

Para obtener una versión anterior del instalador:To obtain an earlier version of the installer:

  1. Vaya a la página Descarga de .NET Core.Navigate to the Download .NET Core page.
  2. Haga clic en la versión de .NET Core que necesite.Click on the desired .NET Core version.
  3. En la columna Run apps - Runtime (Ejecutar aplicaciones - Runtime), busque la fila de la versión del runtime de .NET Core que quiera instalar.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Descargue el instalador mediante el vínculo Runtime & Hosting Bundle (Runtime y conjunto de hospedaje).Download the installer using the Runtime & Hosting Bundle link.

Advertencia

Algunos instaladores contienen versiones que han alcanzado el final del ciclo de vida (EOL) y ya no son compatibles con Microsoft.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Para obtener más información, consulte la política de soporte técnico.For more information, see the support policy.

Instalación del conjunto de hospedajeInstall the Hosting Bundle

  1. Ejecute el instalador en el servidor.Run the installer on the server. Los parámetros siguientes están disponibles cuando se ejecuta el instalador desde un shell de comandos de administrador:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1: omite la instalación del módulo de ASP.NET Core.OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1: omite la instalación del entorno de ejecución de .NET Core.OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime. Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_SHAREDFX=1: omite la instalación del marco compartido de ASP.NET (entorno de ejecución de ASP.NET).OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime). Se usa si el servidor solo hospeda implementaciones autocontenidas (SCD).Used when the server only hosts self-contained deployments (SCD).
    • OPT_NO_X86=1 – omite la instalación de entornos de ejecución x86.OPT_NO_X86=1 – Skip installing x86 runtimes. Utilice este parámetro cuando sepa que no va a hospedar aplicaciones de 32 bits.Use this parameter when you know that you won't be hosting 32-bit apps. Si hay alguna posibilidad de que vaya a hospedar aplicaciones de 32 bits y 64 bits en el futuro, no use este parámetro e instale ambos entornos de ejecución.If there's any chance that you will host both 32-bit and 64-bit apps in the future, don't use this parameter and install both runtimes.
    • OPT_NO_SHARED_CONFIG_CHECK=1: deshabilita la comprobación para usar una configuración compartida de IIS cuando la configuración compartida (applicationHost.config) esté en la misma máquina que la instalación de IIS.OPT_NO_SHARED_CONFIG_CHECK=1 – Disable the check for using an IIS Shared Configuration when the shared configuration (applicationHost.config) is on the same machine as the IIS installation. Solo disponible para ASP.NET Core 2.2 o instaladores del conjunto de hospedaje posteriores.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Para obtener más información, vea Módulo ASP.NET Core.For more information, see Módulo ASP.NET Core.
  2. Reinicie el sistema o ejecute los comandos siguientes en un shell de comandos:Restart the system or execute the following commands in a command shell:

    net stop was /y
    net start w3svc
    

    Al reiniciar IIS, se recoge un cambio en la variable PATH del sistema, que es una variable de entorno, realizado por el programa de instalación.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

No es necesario detener manualmente los sitios individuales en IIS al instalar el conjunto de hospedaje.It isn't necessary to manually stop individual sites in IIS when installing the Hosting Bundle. Las aplicaciones hospedadas (sitios de IIS) se reinician cuando IIS se reinicia.Hosted apps (IIS sites) restart when IIS restarts. Las aplicaciones se inician de nuevo cuando reciben su primera solicitud, incluso desde el módulo de inicialización de la aplicación.Apps start up again when they receive their first request, including from the Application Initialization Module.

ASP.NET Core adopta el comportamiento de puesta al día para las versiones de revisión de los paquetes de marco compartidos.ASP.NET Core adopts roll-forward behavior for patch releases of shared framework packages. Cuando las aplicaciones hospedadas por IIS se reinician con IIS, las aplicaciones se cargan con las versiones de revisión más recientes de los paquetes a los que se hace referencia cuando reciben su primera solicitud.When apps hosted by IIS restart with IIS, the apps load with the latest patch releases of their referenced packages when they receive their first request. Si IIS no se reinicia, las aplicaciones se reinician y muestran el comportamiento de la puesta al día cuando se reciclan sus procesos de trabajo y reciben su primera solicitud.If IIS isn't restarted, apps restart and exhibit roll-forward behavior when their worker processes are recycled and they receive their first request.

Nota

Para obtener información sobre la configuración compartida de IIS, vea ASP.NET Core Module with IIS Shared Configuration (Módulo de ASP.NET Core con configuración compartida de IIS).For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Instalación de Web Deploy al publicar con Visual StudioInstall Web Deploy when publishing with Visual Studio

Al implementar aplicaciones en servidores con Web Deploy, instale la versión más reciente de Web Deploy en el servidor.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Para instalar Web Deploy, use el Instalador de plataforma web (WebPI) u obtenga un instalador directamente desde el Centro de descarga de Microsoft.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. El método preferido es usar WebPI.The preferred method is to use WebPI. WebPI ofrece una instalación independiente y una configuración para los proveedores de hospedaje.WebPI offers a standalone setup and a configuration for hosting providers.

Creación del sitio de IISCreate the IIS site

  1. En el sistema de hospedaje, cree una carpeta para que contenga los archivos y las carpetas publicados de la aplicación.On the hosting system, create a folder to contain the app's published folders and files. En un paso posterior, la ruta de acceso de la carpeta se proporciona a IIS como la ruta de acceso física a la aplicación.In a following step, the folder's path is provided to IIS as the physical path to the app. Para obtener más información sobre el diseño de carpetas y archivos de implementación de una aplicación, consulte Estructura de directorios de ASP.NET Core.For more information on an app's deployment folder and file layout, see Estructura de directorios de ASP.NET Core.

  2. En Administrador de IIS, abra el nodo del servidor en el panel Conexiones.In IIS Manager, open the server's node in the Connections panel. Haga clic con el botón derecho en la carpeta Sitios.Right-click the Sites folder. Haga clic en Agregar sitio web en el menú contextual.Select Add Website from the contextual menu.

  3. Proporcione el Nombre del sitio y establezca la Ruta de acceso física a la carpeta de implementación de la aplicación.Provide a Site name and set the Physical path to the app's deployment folder. Proporcione la configuración de Enlace y cree el sitio web seleccionando Aceptar:Provide the Binding configuration and create the website by selecting OK:

    Proporcione el nombre del sitio, la ruta de acceso física y el nombre de host en el paso Agregar sitio web.

    Advertencia

    Los enlaces de carácter comodín de nivel superior (http://*:80/ y http://+:80) no se deben usar.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Los enlaces de carácter comodín de nivel superior pueden exponer su aplicación a vulnerabilidades de seguridad.Top-level wildcard bindings can open up your app to security vulnerabilities. Esto se aplica tanto a los caracteres comodín fuertes como a los débiles.This applies to both strong and weak wildcards. Use nombres de host explícitos en lugar de caracteres comodín.Use explicit host names rather than wildcards. Los enlaces de carácter comodín de subdominio (por ejemplo, *.mysub.com) no suponen este riesgo de seguridad si se controla todo el dominio primario (a diferencia de *.com, que sí es vulnerable).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). Vea la sección 5.4 de RFC 7230 para obtener más información.See rfc7230 section-5.4 for more information.

  4. En el nodo del servidor, seleccione Grupos de aplicaciones.Under the server's node, select Application Pools.

  5. Haga clic con el botón derecho en el grupo de aplicaciones del sitio y seleccione Configuración básica en el menú contextual.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. En la ventana Modificar grupo de aplicaciones, establezca Versión de .NET CLR en Sin código administrado:In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Establezca Sin código administrado para Versión de .NET CLR.

    ASP.NET Core se ejecuta en un proceso independiente y administra el runtime.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core no se basa en la carga de CLR de escritorio (.NET CLR); Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo.ASP.NET Core doesn't rely on loading the desktop CLR (.NET CLR)—the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process. El establecimiento de Versión de .NET CLR en Sin código administrado es opcional, pero no es lo recomendable.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 o posterior: en el caso de las implementaciones independientes de 64 bits (x64) en las que se use un modelo de hospedaje en proceso, deshabilite el grupo de aplicaciones de los procesos de 32 bits (x86).ASP.NET Core 2.2 or later: For a 64-bit (x64) self-contained deployment that uses the in-process hosting model, disable the app pool for 32-bit (x86) processes.

    En la barra lateral Acciones de la sección Grupos de aplicaciones de Administrador de IIS, seleccione Establecer valores predeterminados de grupos de aplicaciones o Configuración avanzada.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Busque la opción Habilitar aplicaciones de 32 bits y establezca el valor en False.Locate Enable 32-Bit Applications and set the value to False. Las aplicaciones implementadas para un hospedaje fuera de proceso no se ven afectadas por este ajuste.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Confirme que la identidad del modelo de proceso tiene los permisos adecuados.Confirm the process model identity has the proper permissions.

    Si cambia la identidad predeterminada del grupo de aplicaciones (Modelo de proceso > Identidad) de ApplicationPoolIdentity a otra identidad, compruebe que la nueva identidad tenga los permisos necesarios para obtener acceso a la carpeta de la aplicación, la base de datos y otros recursos necesarios.If the default identity of the app pool (Process Model > Identity) is changed from ApplicationPoolIdentity to another identity, verify that the new identity has the required permissions to access the app's folder, database, and other required resources. Por ejemplo, el grupo de aplicaciones requiere acceso de lectura y escritura a las carpetas donde la aplicación lee y escribe archivos.For example, the app pool requires read and write access to folders where the app reads and writes files.

Configuración de la autenticación de Windows (opcional)Windows Authentication configuration (Optional)
Para más información, consulte Configurar la autenticación de Windows.For more information, see Configure Windows authentication.

Implementación de la aplicaciónDeploy the app

Implemente la aplicación en la carpeta Ruta de acceso física de IIS que se creó en la sección Creación del sitio de IIS.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Web Deploy es el mecanismo recomendado para la implementación, pero existen varias opciones para mover la aplicación desde la carpeta publicar del proyecto a la carpeta de implementación del sistema host.Web Deploy is the recommended mechanism for deployment, but several options exist for moving the app from the project's publish folder to the hosting system's deployment folder.

Web Deploy con Visual StudioWeb Deploy with Visual Studio

Vea el tema Visual Studio publish profiles for ASP.NET Core app deployment (Perfiles de publicación de Visual Studio para la implementación de aplicaciones de ASP.NET Core) para obtener más información sobre cómo crear un perfil de publicación para su uso con Web Deploy.See the Visual Studio publish profiles for ASP.NET Core app deployment topic to learn how to create a publish profile for use with Web Deploy. Si el proveedor de hospedaje proporciona un perfil de publicación o permite crear uno, descargue su perfil e impórtelo mediante el cuadro de diálogo Publicar de Visual Studio:If the hosting provider provides a Publish Profile or support for creating one, download their profile and import it using the Visual Studio Publish dialog:

Cuadro de diálogo Publicar

Web Deploy fuera de Visual StudioWeb Deploy outside of Visual Studio

También puede usar Web Deploy fuera de Visual Studio desde la línea de comandos.Web Deploy can also be used outside of Visual Studio from the command line. Para más información, vea Web Deployment Tool (Herramienta de implementación web).For more information, see Web Deployment Tool.

Alternativas a Web DeployAlternatives to Web Deploy

Use cualquiera de los métodos disponibles para mover la aplicación al sistema de hospedaje, como copia manual, Xcopy, Robocopy o PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Para obtener más información sobre ASP.NET Core en IIS, vea la sección Recursos de implementación para administradores de IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Examinar el sitio webBrowse the website

Cuando la aplicación esté implementada en el sistema de hospedaje, realice una solicitud a uno de los puntos de conexión públicos de la aplicación.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

En el ejemplo siguiente, el sitio se enlaza a un Nombre de host de IIS de www.mysite.com en el Puerto 80.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Se realiza una solicitud a http://www.mysite.com:A request is made to http://www.mysite.com:

El explorador Microsoft Edge ha cargado la página de inicio de IIS.

Archivos de implementación bloqueadosLocked deployment files

Los archivos de la carpeta de implementación se bloquean cuando se ejecuta la aplicación.Files in the deployment folder are locked when the app is running. Los archivos bloqueados no se pueden sobrescribir durante la implementación.Locked files can't be overwritten during deployment. Para liberar archivos bloqueados de una implementación, detenga el grupo de aplicaciones mediante uno de los enfoques siguientes:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Use Web Deploy con una referencia a Microsoft.NET.Sdk.Web en el archivo de proyecto.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Se coloca un archivo app_offline.htm en la raíz del directorio de aplicación web.An app_offline.htm file is placed at the root of the web app directory. Cuando el archivo está presente, el módulo de ASP.NET Core cierra correctamente la aplicación y proporciona el archivo app_offline.htm durante la implementación.When the file is present, the ASP.NET Core Module gracefully shuts down the app and serves the app_offline.htm file during the deployment. Para más información, vea ASP.NET Core Module configuration reference (Referencia de configuración del módulo de ASP.NET Core).For more information, see the ASP.NET Core Module configuration reference.

  • Detenga manualmente el grupo de aplicaciones en el Administrador de IIS en el servidor.Manually stop the app pool in the IIS Manager on the server.

  • Utilice PowerShell para colocar app_offline.htm (es necesario PowerShell 5 o una versión posterior):Use PowerShell to drop app_offline.htm (requires PowerShell 5 or later):

    $pathToApp = 'PATH_TO_APP'
    
    # Stop the AppPool
    New-Item -Path $pathToApp app_offline.htm
    
    # Provide script commands here to deploy the app
    
    # Restart the AppPool
    Remove-Item -Path $pathToApp app_offline.htm
    
    

Protección de datosData protection

La pila de protección de datos de ASP.NET Core la usan varios middlewares de ASP.NET Core, incluidos los que se emplean en la autenticación.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Aunque el código de usuario no llame a las API de protección de datos, la protección de datos se debe configurar con un script de implementación o en el código de usuario para crear un almacén de claves criptográficas persistente.Even if Data Protection APIs aren't called by user code, data protection should be configured with a deployment script or in user code to create a persistent cryptographic key store. Si no se configura la protección de datos, las claves se conservan en memoria y se descartan cuando se reinicia la aplicación.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Si el conjunto de claves se almacena en memoria cuando se reinicia la aplicación:If the key ring is stored in memory when the app restarts:

  • Todos los tokens de autenticación basados en cookies se invalidan.All cookie-based authentication tokens are invalidated.
  • Los usuarios tienen que iniciar sesión de nuevo en la siguiente solicitud.Users are required to sign in again on their next request.
  • Ya no se pueden descifrar los datos protegidos con el conjunto de claves.Any data protected with the key ring can no longer be decrypted. Esto puede incluir tokens CSRF y cookies de TempData de ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Para configurar la protección de datos en IIS para conservar el conjunto de claves, use uno de los enfoques siguientes:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Crear claves del Registro de protección de datosCreate Data Protection Registry Keys

    Las claves de protección de datos que las aplicaciones de ASP.NET usan se almacenan en el Registro externo a las aplicaciones.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Para conservar las claves de una determinada aplicación, cree claves del Registro para el grupo de aplicaciones.To persist the keys for a given app, create registry keys for the app pool.

    En las instalaciones independientes de IIS que no son de granja de servidores web, puede usar el script de PowerShell Provision-AutoGenKeys.ps1 de protección de datos para cada grupo de aplicaciones usado con una aplicación de ASP.NET Core.For standalone, non-webfarm IIS installations, the Data Protection Provision-AutoGenKeys.ps1 PowerShell script can be used for each app pool used with an ASP.NET Core app. Este script crea una clave del Registro en el registro HKLM que solo es accesible a la cuenta de proceso de trabajo del grupo de aplicaciones de la aplicación.This script creates a registry key in the HKLM registry that's accessible only to the worker process account of the app's app pool. Las claves se cifran en reposo mediante DPAPI con una clave de equipo.Keys are encrypted at rest using DPAPI with a machine-wide key.

    En escenarios de granja de servidores web, una aplicación puede configurarse para usar una ruta de acceso UNC para almacenar su conjunto de claves de protección de datos.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. De forma predeterminada, las claves de protección de datos no se cifran.By default, the data protection keys aren't encrypted. Asegúrese de que los permisos de archivo de un recurso compartido de red se limitan a la cuenta de Windows bajo la que se ejecuta la aplicación.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Puede usar un certificado X509 para proteger las claves en reposo.An X509 certificate can be used to protect keys at rest. Considere un mecanismo que permita a los usuarios cargar certificados: coloque los certificados en el almacén de certificados de confianza del usuario y asegúrese de que están disponibles en todos los equipos en los que se ejecuta la aplicación del usuario.Consider a mechanism to allow users to upload certificates: Place certificates into the user's trusted certificate store and ensure they're available on all machines where the user's app runs. Vea Configurar la protección de datos en ASP.NET Core para más información.See Configure ASP.NET Core Data Protection for details.

  • Configurar el grupo de aplicaciones de IIS para cargar el perfil de usuarioConfigure the IIS Application Pool to load the user profile

    Esta opción está en la sección Modelo de proceso, en la Configuración avanzada del grupo de aplicaciones.This setting is in the Process Model section under the Advanced Settings for the app pool. Establezca Cargar perfil de usuario en True.Set Load User Profile to True. Cuando se establece en True, las claves se almacenan en el directorio del perfil de usuario y se protegen mediante DPAPI con una clave específica de la cuenta de usuario.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Las claves se conservan en la carpeta %HOME%\ASP.NET\DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    También se debe habilitar el atributo setProfileEnvironment del grupo de aplicaciones.The app pool's setProfileEnvironment attribute must also be enabled. El valor predeterminado de setProfileEnvironment es true.The default value of setProfileEnvironment is true. En algunos escenarios (por ejemplo, SO Windows), setProfileEnvironment está establecido en false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Si las claves no se almacenan en el directorio del perfil de usuario como se esperaba:If keys aren't stored in the user profile directory as expected:

    1. Vaya a la carpeta %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Abra el archivo applicationHost.config.Open the applicationHost.config file.
    3. Busque el elemento <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Confirme que el atributo setProfileEnvironment no está presente, que adopta de forma predeterminada el valor true, o establezca explícitamente el valor del atributo en true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Usar el sistema de archivos como un almacén de conjunto de clavesUse the file system as a key ring store

    Ajuste el código de la aplicación para usar el sistema de archivos como un almacén de conjunto de claves.Adjust the app code to use the file system as a key ring store. Use un certificado X509 para proteger el conjunto de claves y asegúrese de que sea un certificado de confianza.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Si es un certificado autofirmado, colóquelo en el almacén raíz de confianza.If the certificate is self-signed, place the certificate in the Trusted Root store.

    Cuando se usa IIS en una granja de servidores web:When using IIS in a web farm:

    • Use un recurso compartido de archivos al que puedan acceder todos los equipos.Use a file share that all machines can access.
    • Implemente un certificado X509 en cada equipo.Deploy an X509 certificate to each machine. Configure la protección de datos en el código.Configure data protection in code.
  • Establecer una directiva para todo el equipo para la protección de datosSet a machine-wide policy for data protection

    El sistema de protección de datos tiene compatibilidad limitada con el establecimiento de una directiva de equipo predeterminada para todas las aplicaciones que usan las API de protección de datos.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Para obtener más información, vea ASP.NET Core protección de datos.For more information, see ASP.NET Core protección de datos.

Directorios virtualesVirtual Directories

Los directorios virtuales de IIS no son compatibles con aplicaciones ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Una aplicación puede hospedarse como subaplicación.An app can be hosted as a sub-application.

SubaplicacionesSub-applications

Se puede hospedar una aplicación ASP.NET Core como una subaplicación IIS.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). La ruta de acceso de la subaplicación se convierte en parte de la dirección URL de la aplicación raíz.The sub-app's path becomes part of the root app's URL.

Una aplicación secundaria no debe incluir el módulo de ASP.NET Core como controlador.A sub-app shouldn't include the ASP.NET Core Module as a handler. Si se agrega el módulo como controlador al archivo web.config de una aplicación secundaria, aparece un error 500.19 (Error interno del servidor) que hace referencia al archivo de configuración erróneo al intentar examinar la aplicación secundaria.If the module is added as a handler in a sub-app's web.config file, a 500.19 Internal Server Error referencing the faulty config file is received when attempting to browse the sub-app.

En el ejemplo siguiente se muestra un archivo web.config publicado para una aplicación secundaria ASP.NET Core:The following example shows a published web.config file for an ASP.NET Core sub-app:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Al hospedar una aplicación secundaria que no es de ASP.NET Core bajo una aplicación de ASP.NET Core, quite explícitamente el controlador heredado del archivo web.config de la aplicación secundaria:When hosting a non-ASP.NET Core sub-app underneath an ASP.NET Core app, explicitly remove the inherited handler in the sub-app's web.config file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <remove name="aspNetCore" />
    </handlers>
    <aspNetCore processPath="dotnet" 
      arguments=".\MyApp.dll" 
      stdoutLogEnabled="false" 
      stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

Los vínculos a los recursos estáticos dentro de la aplicación secundaria deben utilizar una notación de una tilde con una barra diagonal (~/).Static asset links within the sub-app should use tilde-slash (~/) notation. La notación de tilde barra diagonal desencadena un asistente de etiquetas para anteponer la ruta de acceso de la aplicación secundaria al vínculo relativo representado.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Para una aplicación secundaria en /subapp_path, una imagen vinculada con src="~/image.png" se representa como src="/subapp_path/image.png".For a sub-app at /subapp_path, an image linked with src="~/image.png" is rendered as src="/subapp_path/image.png". El middleware de archivos estáticos de la aplicación raíz no procesa la solicitud de archivo estático.The root app's Static File Middleware doesn't process the static file request. La solicitud se procesa mediante el middleware de archivos estáticos de la aplicación secundaria.The request is processed by the sub-app's Static File Middleware.

Si el atributo src de un recurso estático se establece en una ruta de acceso absoluta (por ejemplo, src="/image.png"), el vínculo se representa sin la base de la ruta de acceso de la aplicación secundaria.If a static asset's src attribute is set to an absolute path (for example, src="/image.png"), the link is rendered without the sub-app's pathbase. El middleware de archivos estáticos de la aplicación raíz intenta atender al recurso desde el web root, lo que resulta en una respuesta 404 - No encontrado a menos que el recurso estático esté disponible desde la aplicación raíz.The root app's Static File Middleware attempts to serve the asset from the root app's web root, which results in a 404 - Not Found response unless the static asset is available from the root app.

Para hospedar una aplicación ASP.NET Core como aplicación secundaria en otra aplicación ASP.NET Core:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Establezca un grupo de aplicaciones para la aplicación secundaria.Establish an app pool for the sub-app. Establezca Versión de .NET CLR en Sin código administrado porque Core Common Language Runtime (CoreCLR) para .NET Core se arranca para hospedar la aplicación en el proceso de trabajo, no el CLR de escritorio (.NET CLR).Set the .NET CLR Version to No Managed Code because the Core Common Language Runtime (CoreCLR) for .NET Core is booted to host the app in the worker process, not the desktop CLR (.NET CLR).

  2. Agregue el sitio raíz en el Administrador de IIS con la aplicación secundaria en una carpeta en el sitio raíz.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Haga clic con el botón derecho en la carpeta de la aplicación secundaria en el Administrador de IIS y seleccione Convertir en aplicación.Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. En el cuadro de diálogo Agregar aplicación, use el botón Seleccionar en Grupo de aplicaciones para asignar el grupo de aplicaciones que ha creado para la aplicación secundaria.In the Add Application dialog, use the Select button for the Application Pool to assign the app pool that you created for the sub-app. Seleccione Aceptar.Select OK.

La asignación de un grupo de aplicaciones independiente de la aplicación secundaria es un requisito cuando se utiliza el modelo de hospedaje en proceso.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Para más información sobre el modelo de hospedaje en proceso y cómo configurar el módulo de ASP.NET Core, consulte Módulo ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Módulo ASP.NET Core.

Configuración de IIS con web.configConfiguration of IIS with web.config

En escenarios de IIS que son funcionales para aplicaciones ASP.NET Core con el módulo ASP.NET Core, la configuración de IIS está influenciada por la sección <system.webServer> de web.config.IIS configuration is influenced by the <system.webServer> section of web.config for IIS scenarios that are functional for ASP.NET Core apps with the ASP.NET Core Module. Por ejemplo, la configuración de IIS es funcional para la compresión dinámica.For example, IIS configuration is functional for dynamic compression. Si IIS está configurado en el nivel de servidor para usar compresión dinámica, el elemento <urlCompression> del archivo web.config de la aplicación puede deshabilitarlo para una aplicación ASP.NET Core.If IIS is configured at the server level to use dynamic compression, the <urlCompression> element in the app's web.config file can disable it for an ASP.NET Core app.

Para obtener más información, vea los temas siguientes:For more information, see the following topics:

Para establecer variables de entorno para aplicaciones individuales que se ejecutan en grupos de aplicaciones aislados (se admite para IIS 10.0 o posterior), vea la sección AppCmd.exe command (Comando AppCmd.exe) del tema Environment Variables <environmentVariables> (Variables de entorno ) de la documentación de referencia de IIS.To set environment variables for individual apps running in isolated app pools (supported for IIS 10.0 or later), see the AppCmd.exe command section of the Environment Variables <environmentVariables> topic in the IIS reference documentation.

Secciones de configuración de web.configConfiguration sections of web.config

Las aplicaciones ASP.NET Core no usan las secciones de configuración de aplicaciones ASP.NET 4.x en web.config para la configuración:Configuration sections of ASP.NET 4.x apps in web.config aren't used by ASP.NET Core apps for configuration:

  • <system.web>
  • <appSettings>
  • <connectionStrings>
  • <location>

Las aplicaciones de ASP.NET Core se configuran mediante otros proveedores de configuración.ASP.NET Core apps are configured using other configuration providers. Para obtener más información, vea Configuración.For more information, see Configuration.

Grupos de aplicacionesApplication Pools

Al hospedar varios sitios web en un servidor, nuestra recomendación es aislar las aplicaciones entre sí ejecutándolas en su propio grupo de aplicaciones.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. El valor predeterminado del cuadro de diálogo Agregar sitio web es esta configuración.The IIS Add Website dialog defaults to this configuration. Cuando se proporciona el Nombre del sitio, el texto se transfiere automáticamente al cuadro de texto Grupo de aplicaciones.When a Site name is provided, the text is automatically transferred to the Application pool textbox. Al agregar el sitio se crea un grupo de aplicaciones con el nombre del sitio.A new app pool is created using the site name when the site is added.

Identidad del grupo de aplicacionesApplication Pool Identity

Una cuenta de identidad del grupo de aplicaciones permite ejecutar una aplicación en una cuenta única sin tener que crear ni administrar dominios o cuentas locales.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. En IIS 8.0 o versiones posteriores, el proceso de trabajo de administración de IIS (WAS) crea una cuenta virtual con el nombre del nuevo grupo de aplicaciones y ejecuta los procesos de trabajo del grupo de aplicaciones en esta cuenta de forma predeterminada.On IIS 8.0 or later, the IIS Admin Worker Process (WAS) creates a virtual account with the name of the new app pool and runs the app pool's worker processes under this account by default. En la Consola de administración de IIS, en la opción Configuración avanzada del grupo de aplicaciones, asegúrese de que la Identidad está establecida para usar ApplicationPoolIdentity:In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Cuadro de diálogo Configuración avanzada del grupo de aplicaciones

El proceso de administración de IIS crea un identificador seguro con el nombre del grupo de aplicaciones en el sistema de seguridad de Windows.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. Los recursos se pueden proteger mediante esta identidad.Resources can be secured using this identity. Sin embargo, no es una cuenta de usuario real ni se muestra en la consola de administración de usuario de Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Si el proceso de trabajo de IIS requiere acceso con privilegios elevados a la aplicación, modifique la lista de control de acceso (ACL) del directorio que contiene la aplicación:If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Abra el Explorador de Windows y vaya al directorio.Open Windows Explorer and navigate to the directory.

  2. Haga clic con el botón derecho en el directorio y seleccione Propiedades.Right-click on the directory and select Properties.

  3. En la pestaña Seguridad, haga clic en el botón Editar y en el botón Agregar.Under the Security tab, select the Edit button and then the Add button.

  4. Haga clic en el botón Ubicaciones y asegúrese de seleccionar el sistema.Select the Locations button and make sure the system is selected.

  5. Escriba IIS AppPool\<nombre_del_grupo_de_aplicaciones> en el área Escribir los nombres de objeto para seleccionar.Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Haga clic en el botón Comprobar nombres.Select the Check Names button. Para DefaultAppPool compruebe los nombres con IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. Cuando el botón Comprobar nombres está seleccionado, un valor de DefaultAppPool se indica en el área de los nombres de objeto.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. No es posible escribir el nombre del grupo de aplicaciones directamente en el área de los nombres de objeto.It isn't possible to enter the app pool name directly into the object names area. Use el formato IIS AppPool\<nombre_del_grupo_de_aplicaciones> cuando compruebe el nombre del objeto.Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: el nombre del grupo de aplicaciones de "DefaultAppPool" se anexa al "IIS AppPool" en el área de los nombres de objeto antes de seleccionar "Comprobar nombres".

  6. Seleccione Aceptar.Select OK.

    Cuadro de diálogo Seleccionar usuarios o grupos para la carpeta de la aplicación: después de seleccionar "Comprobar nombres", el nombre del objeto "DefaultAppPool" se muestra en el área de los nombres de objeto.

  7. Los permisos de lectura y ejecución se deben conceder de forma predeterminada.Read & execute permissions should be granted by default. Proporcione permisos adicionales según sea necesario.Provide additional permissions as needed.

El acceso también se puede conceder mediante un símbolo del sistema con la herramienta ICACLS.Access can also be granted at a command prompt using the ICACLS tool. En el siguiente comando se usa DefaultAppPool como ejemplo:Using the DefaultAppPool as an example, the following command is used:

ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F

Para más información, consulte el tema icacls.For more information, see the icacls topic.

Compatibilidad con HTTP/2HTTP/2 support

HTTP/2 es compatible con las implementaciones fuera de proceso que cumplen los requisitos básicos siguientes:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016/Windows 10 o posterior; IIS 10 o posteriorWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Las conexiones de servidor perimetral de acceso público usan HTTP/2, pero la conexión de proxy inverso al servidor de Kestrel usa HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • Marco de destino: no es aplicable a las implementaciones fuera de proceso, ya que IIS controla completamente la conexión HTTP/2.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • Conexión con TLS 1.2 o una versión posteriorTLS 1.2 or later connection

Si se establece una conexión HTTP/2, HttpRequest.Protocol notifica HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

HTTP/2 está habilitado de forma predeterminada.HTTP/2 is enabled by default. Las conexiones vuelven a HTTP/1.1 si no se establece una conexión HTTP/2.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Para más información sobre la configuración HTTP/2 con implementaciones de IIS, vea HTTP/2 en IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Solicitudes CORS de preflightCORS preflight requests

Esta sección solo se aplica a las aplicaciones de ASP.NET Core que tienen como destino .NET Framework.This section only applies to ASP.NET Core apps that target the .NET Framework.

Para una aplicación de ASP.NET Core que tiene como destino .NET Framework, las solicitudes OPTIONS no se pasan a la aplicación de forma predeterminada en IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Para obtener información sobre cómo configurar los controladores de IIS de la aplicación en web.config para pasar las solicitudes OPTIONS, consulte Habilitar solicitudes entre orígenes en ASP.NET Web API 2: Cómo funciona la CORS.To learn how to configure the app's IIS handlers in web.config to pass OPTIONS requests, see Enable cross-origin requests in ASP.NET Web API 2: How CORS Works.

Recursos de implementación para administradores de IISDeployment resources for IIS administrators

Recursos adicionalesAdditional resources