Размещение ASP.NET Core в Windows со службами IISHost ASP.NET Core on Windows with IIS

Автор Люк Латэм (Luke Latham)By Luke Latham

Руководство по публикации приложения ASP.NET Core на сервере IIS см. по этой ссылке: Публикация приложения ASP.NET Core в службах IIS.For a tutorial experience on publishing an ASP.NET Core app to an IIS server, see Публикация приложения ASP.NET Core в службах IIS.

Установка пакета размещения .NET CoreInstall the .NET Core Hosting Bundle

Поддерживаемые операционные системыSupported operating systems

Поддерживаются следующие операционные системы:The following operating systems are supported:

  • Windows 7 и более поздние версииWindows 7 or later
  • Windows Server 2008 R2 и более поздние версииWindows Server 2008 R2 or later

Сервер HTTP.sys (ранее назывался WebListener) не работает в конфигурации обратного прокси-сервера со службами IIS.HTTP.sys server (formerly called WebListener) doesn't work in a reverse proxy configuration with IIS. Используйте сервер Kestrel.Use the Kestrel server.

Сведения о размещении в Azure см. в статье Развертывание приложений ASP.NET Core в Службе приложений Azure.For information on hosting in Azure, see Развертывание приложений ASP.NET Core в Службе приложений Azure.

Рекомендации по устранению неполадок см. в статье Устранение неполадок ASP.NET Core проектов.For troubleshooting guidance, see Устранение неполадок ASP.NET Core проектов.

Поддерживаемые платформыSupported platforms

Поддерживаются приложения, опубликованные для развертывания в 32-разрядных (x86) или 64-разрядных (x64) системах.Apps published for 32-bit (x86) or 64-bit (x64) deployment are supported. Развертывайте 32-разрядную версию (x86) приложения с использованием 32-разрядного пакета SDK для .NET Core, кроме следующих случаев:Deploy a 32-bit app with a 32-bit (x86) .NET Core SDK unless the app:

  • Приложению требуется более широкое адресное пространство виртуальной памяти, доступное в 64-разрядной версии приложения.Requires the larger virtual memory address space available to a 64-bit app.
  • Приложению требуется стек IIS большего размера.Requires the larger IIS stack size.
  • В коде присутствуют зависимости 64-разрядной версии.Has 64-bit native dependencies.

Используйте 64-разрядный (x64) пакет SDK для .NET Core для публикации 64-разрядной версии приложения.Use a 64-bit (x64) .NET Core SDK to publish a 64-bit app. Для этого в системе узла должна присутствовать 64-разрядная версия среды выполнения.A 64-bit runtime must be present on the host system.

Модели размещенияHosting models

Модель внутрипроцессного размещенияIn-process hosting model

При внутрипроцессном размещении приложение ASP.NET Core выполняется в том же процессе, что и рабочий процесс IIS.Using in-process hosting, an ASP.NET Core app runs in the same process as its IIS worker process. При этом повышается производительность по сравнению с внепроцессным размещением, так как запросы не передаются через адаптер замыкания на себя (сетевой интерфейс, который возвращает исходящий сетевой трафик на тот же компьютер).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 обрабатывает управление процессом с помощью службы активации процессов Windows (WAS).IIS handles process management with the Windows Process Activation Service (WAS).

Модуль ASP.NET Core:The ASP.NET Core Module:

  • Инициализирует приложение.Performs app initialization.
    • Загружает CoreCLR.Loads the CoreCLR.
    • Вызывает Program.Main.Calls Program.Main.
  • Управляет жизненным циклом собственного запроса IIS.Handles the lifetime of the IIS native request.

Модель внутрипроцессного размещения не поддерживается для приложений ASP.NET Core, предназначенных для .NET Framework.The in-process hosting model isn't supported for ASP.NET Core apps that target the .NET Framework.

На следующей схеме показана связь между IIS, модулем ASP.NET Core и приложением, размещенным внутри процесса.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted in-process:

Модуль ASP.NET Core в сценарии внутрипроцессного размещения

Запрос поступает из Интернета в драйвер HTTP.sys в режиме ядра.A request arrives from the web to the kernel-mode HTTP.sys driver. Драйвер направляет собственный запрос к IIS на настроенный порт веб-сайта — обычно 80 (HTTP) или 443 (HTTPS).The driver routes the native request to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Модуль получает собственный запрос и передает его на HTTP-сервер IIS (IISHttpServer).The module receives the native request and passes it to IIS HTTP Server (IISHttpServer). HTTP-сервер IIS — это реализация внутрипроцессного сервера для IIS, в которой запрос преобразовывается из собственной формы в управляемую.IIS HTTP Server is an in-process server implementation for IIS that converts the request from native to managed.

После того как HTTP-сервер IIS обрабатывает запрос, он передается в конвейер ПО промежуточного слоя ASP.NET Core.After the IIS HTTP Server processes the request, the request is pushed into the ASP.NET Core middleware pipeline. Конвейер ПО промежуточного слоя обрабатывает запрос и передает его в качестве экземпляра HttpContext в логику приложения.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. Ответ приложения передается обратно в службы IIS через HTTP-сервер IIS.The app's response is passed back to IIS through IIS HTTP Server. IIS отправляет ответ клиенту, который инициировал запрос.IIS sends the response to the client that initiated the request.

Внутрипроцессное размещение необходимо явно выбирать в существующих приложениях, но в шаблонах dotnet new оно включено по умолчанию для всех сценариев IIS и 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 добавляет экземпляр IServer. При этом вызывается метод UseIIS для загрузки CoreCLR и размещения приложения внутри рабочего процесса IIS (w3wp.exe или 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). Тесты производительности показывают, что размещение приложения .NET Core внутри процесса позволяет обрабатывать значительно больше запросов, чем при размещении приложения вне процесса с перенаправлением запросов к серверу 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.

Примечание

Приложения, опубликованные в виде одного исполняемого файла, не могут быть загружены по модели внутрипроцессного размещения.Apps published as a single file executable can't be loaded by the in-process hosting model.

Модель размещения вне процессаOut-of-process hosting model

Так как приложения ASP.NET Core выполняются в процессе, отделенном от рабочего процесса IIS, этот модуль обрабатывает управление процессами.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. Модуль запускает процесс для приложения ASP.NET Core при поступлении первого запроса и перезапускает приложение при сбое или завершении работы.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. Это, по сути, совпадает с поведением приложений, выполняемых внутрипроцессно и управляемых службой активации процессов 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).

На следующей схеме показана связь между IIS, модулем ASP.NET Core и приложением, размещенным вне процесса.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Модуль ASP.NET Core в сценарии внепроцессного размещения

Запросы поступают из Интернета в драйвер HTTP.sys в режиме ядра.Requests arrive from the web to the kernel-mode HTTP.sys driver. Драйвер направляет запросы к службам IIS на настроенный порт веб-сайта — обычно 80 (HTTP) или 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Модуль перенаправляет запросы Kestrel на случайный порт для приложения, отличающийся от порта 80 или 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Модуль задает порт с помощью переменной среды во время запуска, а расширение UseIISIntegration настраивает сервер для прослушивания 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}. Выполняются дополнительные проверки, и запросы не из модуля отклоняются.Additional checks are performed, and requests that don't originate from the module are rejected. Модуль не поддерживает переадресацию по HTTPS, поэтому запросы переадресовываются по протоколу HTTP, даже если были получены IIS по протоколу HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

После того как Kestrel забирает запрос из модуля, запрос передается в конвейер ПО промежуточного слоя ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. Конвейер ПО промежуточного слоя обрабатывает запрос и передает его в качестве экземпляра HttpContext в логику приложения.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. ПО промежуточного слоя, добавленное интеграцией IIS, обновляет схему, удаленный IP-адрес и базовый путь для переадресации запроса в Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. Отклик приложения передается обратно в службу IIS, которая отправляет его обратно в HTTP-клиент, инициировавший запрос.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

ASP.NET Core поставляется с сервером Kestrel, который является кроссплатформенным HTTP-сервером по умолчанию.ASP.NET Core ships with Kestrel server, a default, cross-platform HTTP server.

При использовании IIS или IIS Express приложение запускается отдельно от рабочего процесса IIS (внепроцессно) с сервером 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.

Так как приложения ASP.NET Core выполняются в процессе, отделенном от рабочего процесса IIS, этот модуль обрабатывает управление процессами.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module handles process management. Модуль запускает процесс для приложения ASP.NET Core при поступлении первого запроса и перезапускает приложение при сбое или завершении работы.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. Это, по сути, совпадает с поведением приложений, выполняемых внутрипроцессно и управляемых службой активации процессов 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).

На следующей схеме показана связь между IIS, модулем ASP.NET Core и приложением, размещенным вне процесса.The following diagram illustrates the relationship between IIS, the ASP.NET Core Module, and an app hosted out-of-process:

Модуль ASP.NET Core

Запросы поступают из Интернета в драйвер HTTP.sys в режиме ядра.Requests arrive from the web to the kernel-mode HTTP.sys driver. Драйвер направляет запросы к службам IIS на настроенный порт веб-сайта — обычно 80 (HTTP) или 443 (HTTPS).The driver routes the requests to IIS on the website's configured port, usually 80 (HTTP) or 443 (HTTPS). Модуль перенаправляет запросы Kestrel на случайный порт для приложения, отличающийся от порта 80 или 443.The module forwards the requests to Kestrel on a random port for the app, which isn't port 80 or 443.

Модуль задает порт с помощью переменной среды во время запуска, а ПО промежуточного слоя для интеграции IIS настраивает сервер для прослушивания 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}. Выполняются дополнительные проверки, и запросы не из модуля отклоняются.Additional checks are performed, and requests that don't originate from the module are rejected. Модуль не поддерживает переадресацию по HTTPS, поэтому запросы переадресовываются по протоколу HTTP, даже если были получены IIS по протоколу HTTPS.The module doesn't support HTTPS forwarding, so requests are forwarded over HTTP even if received by IIS over HTTPS.

После того как Kestrel забирает запрос из модуля, запрос передается в конвейер ПО промежуточного слоя ASP.NET Core.After Kestrel picks up the request from the module, the request is pushed into the ASP.NET Core middleware pipeline. Конвейер ПО промежуточного слоя обрабатывает запрос и передает его в качестве экземпляра HttpContext в логику приложения.The middleware pipeline handles the request and passes it on as an HttpContext instance to the app's logic. ПО промежуточного слоя, добавленное интеграцией IIS, обновляет схему, удаленный IP-адрес и базовый путь для переадресации запроса в Kestrel.Middleware added by IIS Integration updates the scheme, remote IP, and pathbase to account for forwarding the request to Kestrel. Отклик приложения передается обратно в службу IIS, которая отправляет его обратно в HTTP-клиент, инициировавший запрос.The app's response is passed back to IIS, which pushes it back out to the HTTP client that initiated the request.

CreateDefaultBuilder настраивает сервер Kestrel в качестве веб-сервера и активирует интеграцию IIS, задавая базовый путь и порт для модуля 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.

Модуль ASP.NET Core создает динамический порт для назначения серверному процессу.The ASP.NET Core Module generates a dynamic port to assign to the backend process. CreateDefaultBuilder вызывает метод UseIISIntegration.CreateDefaultBuilder calls the UseIISIntegration method. UseIISIntegration настраивает Kestrel для прослушивания динамического порта по IP-адресу localhost (127.0.0.1).UseIISIntegration configures Kestrel to listen on the dynamic port at the localhost IP address (127.0.0.1). Если динамический порт — 1234, Kestrel прослушивает 127.0.0.1:1234.If the dynamic port is 1234, Kestrel listens at 127.0.0.1:1234. Эта конфигурация заменяет другие конфигурации URL-адресов, предоставляемые:This configuration replaces other URL configurations provided by:

Вызовы UseUrls или API Listen Kestrel при работе с этим модулем не требуются.Calls to UseUrls or Kestrel's Listen API aren't required when using the module. При вызове UseUrls или Listen Kestrel ожидает передачи данных на порт, указанный только при выполнении приложения без IIS.If UseUrls or Listen is called, Kestrel listens on the port specified only when running the app without IIS.

Дополнительные сведения о моделях внутри- и внепроцессного размещения см. в разделах Модуль ASP.NET Core и Справочник по конфигурации модуля ASP.NET Core.For more information on the in-process and out-of-process hosting models, see ASP.NET Core Module and ASP.NET Core Module configuration reference.

Инструкции по настройке модуля ASP.NET Core см. в статье Модуль ASP.NET Core.For ASP.NET Core Module configuration guidance, see Модуль ASP.NET Core.

Дополнительные сведения о размещении см. в разделе Размещение в ASP.NET Core.For more information on hosting, see Host in ASP.NET Core.

Настройка приложенияApplication configuration

Включение компонентов IISIntegrationEnable the IISIntegration components

Обычно Program.cs вызывает CreateDefaultBuilder, чтобы начать настройку узла, обеспечивающего интеграцию со службами IIS:A typical Program.cs calls CreateDefaultBuilder to begin setting up a host that enables integration with IIS:

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

Параметры служб IISIIS options

Модель внутрипроцессного размещенияIn-process hosting model

Чтобы настроить параметры сервера IIS, включите конфигурацию служб для IISServerOptions в ConfigureServices.To configure IIS Server options, include a service configuration for IISServerOptions in ConfigureServices. В следующем примере показано, как отключить AutomaticAuthentication:The following example disables AutomaticAuthentication:

services.Configure<IISServerOptions>(options => 
{
    options.AutomaticAuthentication = false;
});
ПараметрOption Значение по умолчаниюDefault ПараметрSetting
AutomaticAuthentication true Если значение — true, сервер IIS задает свойство HttpContext.User, использующее проверку подлинности Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Если значение — false, сервер только предоставляет идентификатор для HttpContext.User и отвечает на явные запросы защиты от AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Для работы AutomaticAuthentication необходимо включить в службах IIS проверку подлинности Windows.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Дополнительные сведения: Проверка подлинности Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Задает отображаемое имя для пользователей на страницах входа.Sets the display name shown to users on login pages.
AllowSynchronousIO false Разрешены ли синхронные операции ввода-вывода для HttpContext.Request и HttpContext.Response.Whether synchronous IO is allowed for the HttpContext.Request and the HttpContext.Response.
MaxRequestBodySize 30000000 Возвращает или задает максимальный размер текста запроса для HttpRequest.Gets or sets the max request body size for the HttpRequest. Обратите внимание, что сами службы IIS ограничены параметром maxAllowedContentLength, который обрабатывается перед тем, как MaxRequestBodySize задается в IISServerOptions.Note that IIS itself has the limit maxAllowedContentLength which will be processed before the MaxRequestBodySize set in the IISServerOptions. Изменение MaxRequestBodySize не влияет на maxAllowedContentLength.Changing the MaxRequestBodySize won't affect the maxAllowedContentLength. Чтобы увеличить maxAllowedContentLength, добавьте запись в web.config, чтобы задать maxAllowedContentLength большее значение.To increase maxAllowedContentLength, add an entry in the web.config to set maxAllowedContentLength to a higher value. Дополнительные сведения см. в разделе Конфигурация.For more details, see Configuration.

Модель размещения вне процессаOut-of-process hosting model

ПараметрOption Значение по умолчаниюDefault ПараметрSetting
AutomaticAuthentication true Если значение — true, сервер IIS задает свойство HttpContext.User, использующее проверку подлинности Windows.If true, IIS Server sets the HttpContext.User authenticated by Windows Authentication. Если значение — false, сервер только предоставляет идентификатор для HttpContext.User и отвечает на явные запросы защиты от AuthenticationScheme.If false, the server only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Для работы AutomaticAuthentication необходимо включить в службах IIS проверку подлинности Windows.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Дополнительные сведения: Проверка подлинности Windows.For more information, see Windows Authentication.
AuthenticationDisplayName null Задает отображаемое имя для пользователей на страницах входа.Sets the display name shown to users on login pages.

Модель размещения вне процессаOut-of-process hosting model

Чтобы настроить параметры IIS, включите конфигурацию служб для IISOptions в ConfigureServices.To configure IIS options, include a service configuration for IISOptions in ConfigureServices. В следующем примере приложению запрещается заполнение HttpContext.Connection.ClientCertificate:The following example prevents the app from populating HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
ПараметрOption Значение по умолчаниюDefault ПараметрSetting
AutomaticAuthentication true Если значение — true, ПО промежуточного слоя для интеграции IIS задает свойство HttpContext.User, которое прошло проверку подлинности Windows.If true, IIS Integration Middleware sets the HttpContext.User authenticated by Windows Authentication. Если значение — false, ПО промежуточного слоя только предоставляет идентификатор для HttpContext.User и отвечает на явные запросы защиты от AuthenticationScheme.If false, the middleware only provides an identity for HttpContext.User and responds to challenges when explicitly requested by the AuthenticationScheme. Для работы AutomaticAuthentication необходимо включить в службах IIS проверку подлинности Windows.Windows Authentication must be enabled in IIS for AutomaticAuthentication to function. Дополнительные сведения см. в статье о проверке подлинности Windows.For more information, see the Windows Authentication topic.
AuthenticationDisplayName null Задает отображаемое имя для пользователей на страницах входа.Sets the display name shown to users on login pages.
ForwardClientCertificate true Если значение — true и если присутствует заголовок запроса MS-ASPNETCORE-CLIENTCERT, происходит заполнение HttpContext.Connection.ClientCertificate.If true and the MS-ASPNETCORE-CLIENTCERT request header is present, the HttpContext.Connection.ClientCertificate is populated.

Сценарии использования прокси-сервера и подсистемы балансировки нагрузкиProxy server and load balancer scenarios

ПО промежуточного слоя для интеграции IIS, которое настраивает ПО промежуточного слоя переадресации заголовков, и модуль ASP.NET Core настраиваются на пересылку схемы (HTTP/HTTPS) и удаленного IP-адреса расположения, где был сформирован запрос.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. Для приложений, размещенных за дополнительными прокси-серверами и подсистемами балансировки нагрузки, может потребоваться дополнительная настройка.Additional configuration might be required for apps hosted behind additional proxy servers and load balancers. Дополнительные сведения см. в разделе Настройка ASP.NET Core для работы с прокси-серверами и подсистемами балансировки нагрузки.For more information, see Configure ASP.NET Core to work with proxy servers and load balancers.

Файл web.configweb.config file

В файле web.config содержится конфигурация модуля ASP.NET Core.The web.config file configures the ASP.NET Core Module. Создание, преобразование и публикация файла web.config обрабатываются целевым объектом MSBuild (_TransformWebConfig) при публикации проекта.Creating, transforming, and publishing the web.config file is handled by an MSBuild target (_TransformWebConfig) when the project is published. Этот целевой объект присутствует в целевых веб-пакетах SDK (Microsoft.NET.Sdk.Web).This target is present in the Web SDK targets (Microsoft.NET.Sdk.Web). Пакет SDK задается в начале файла проекта:The SDK is set at the top of the project file:

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

Если в проекте нет файла web.config, он создается с соответствующими аргументами processPath и arguments для настройки модуля ASP.NET Core и переносится в опубликованные выходные данные.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.

Если в проекте есть файл web.config, он преобразуется с соответствующими аргументами processPath и arguments для настройки модуля ASP.NET Core и переносится в опубликованные выходные данные.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. Преобразование не изменяет параметры конфигурации служб IIS, включенные в файл.The transformation doesn't modify IIS configuration settings in the file.

Файл web.config может содержать дополнительные параметры конфигурации IIS, управляющие активными модулями IIS.The web.config file may provide additional IIS configuration settings that control active IIS modules. Сведения о модулях IIS, которые могут обрабатывать запросы к приложениям ASP.NET Core, см. в статье Модули IIS.For information on IIS modules that are capable of processing requests with ASP.NET Core apps, see the IIS modules topic.

Чтобы пакет SDK не преобразовывал файл web.config, добавьте в файл проекта свойство <IsTransformWebConfigDisabled> .To prevent the Web SDK from transforming the web.config file, use the <IsTransformWebConfigDisabled> property in the project file:

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

Если пакет SDK не преобразует файл, аргументы processPath и arguments нужно задать вручную.When disabling the Web SDK from transforming the file, the processPath and arguments should be manually set by the developer. Дополнительные сведения см. в разделе Справочник по конфигурации модуля ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

Расположение файла web.configweb.config file location

Для корректной настройки модуля ASP.NET Core необходимо наличие файла web.config в корневой папке контента развертываемого приложения (как правило, это основной путь приложения).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. Это расположение соответствует физическому пути веб-сайта, указанному в службах IIS.This is the same location as the website physical path provided to IIS. Файл web.config требуется в корне приложения, чтобы разрешить публикацию нескольких приложений с помощью веб-развертывания.The web.config file is required at the root of the app to enable the publishing of multiple apps using Web Deploy.

По физическому пути приложения находятся файлы с конфиденциальной информацией: <имя_сборки>.runtimeconfig.json, <имя_сборки>.xml (комментарии к XML-документации) и <имя_сборки>.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. Когда файл web.config присутствует и сайт запускается нормально, службы IIS не обрабатывают запросы к этим файлам.When the web.config file is present and the site starts normally, IIS doesn't serve these sensitive files if they're requested. Если файл web.config отсутствует, неправильно именован или не может настроить нормальный запуск сайта, службы IIS могут свободно передавать содержимое этих конфиденциальных файлов.If the web.config file is missing, incorrectly named, or unable to configure the site for normal startup, IIS may serve sensitive files publicly.

Файл web.config должен постоянно находиться в развертывании, у этого файла должно быть правильное имя, и файл должен быть в состоянии настроить нормальный запуск сайта. Никогда не удаляйте файл web.config из развертывания в рабочей среде.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.

Преобразование web.configTransform web.config

Если вам нужно преобразовать web.config при публикации (например, задать переменные среды на основе конфигурации, профиля или среды), см. раздел Преобразование web.config.If you need to transform web.config on publish (for example, set environment variables based on the configuration, profile, or environment), see Преобразование web.config.

Конфигурация IISIIS configuration

Операционные системы семейства Windows ServerWindows Server operating systems

Включите роль сервера Веб-сервер (IIS) и настройте службы роли.Enable the Web Server (IIS) server role and establish role services.

  1. В меню Управление запустите мастер Добавить роли и компоненты или в окне Диспетчер серверов щелкните соответствующую ссылку.Use the Add Roles and Features wizard from the Manage menu or the link in Server Manager. На этапе Роли сервера установите флажок Веб-сервер (IIS) .On the Server Roles step, check the box for Web Server (IIS).

    Роль "Веб-сервер (IIS)" выбрана на странице "Выбор ролей сервера".

  2. После этапа выбора компонентов запускается этап выбора служб роли для веб-сервера (IIS).After the Features step, the Role services step loads for Web Server (IIS). Выберите нужные службы роли IIS или оставьте службы по умолчанию.Select the IIS role services desired or accept the default role services provided.

    Службы роли по умолчанию, выбранные на странице "Выбор служб ролей".

    Проверка подлинности Windows (необязательный компонент)Windows Authentication (Optional)
    Чтобы включить проверку подлинности Windows, разверните такие узлы: Веб-сервер > Безопасность.To enable Windows Authentication, expand the following nodes: Web Server > Security. Выберите компонент Проверка подлинности Windows.Select the Windows Authentication feature. Дополнительные сведения см. в статьях Windows Authentication <windowsAuthentication> (Проверка подлинности Windows ) и Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    Протокол WebSocket (необязательный компонент)WebSockets (Optional)
    Протокол WebSocket поддерживается в ASP.NET Core начиная с версии 1.1.WebSockets is supported with ASP.NET Core 1.1 or later. Чтобы включить протокол WebSocket, разверните такие узлы: Веб-сервер > Разработка приложений.To enable WebSockets, expand the following nodes: Web Server > Application Development. Выберите компонент Протокол WebSocket.Select the WebSocket Protocol feature. Дополнительные сведения см. в разделе Протокол WebSocket.For more information, see WebSockets.

  3. Пройдите этап Подтверждение, чтобы установить роль и службы веб-сервера.Proceed through the Confirmation step to install the web server role and services. После установки роли Веб-сервер (IIS) перезагружать сервер или службы IIS не требуется.A server/IIS restart isn't required after installing the Web Server (IIS) role.

Операционные системы Windows для настольных компьютеровWindows desktop operating systems

Включите компоненты Консоль управления IIS и Службы Интернета.Enable the IIS Management Console and World Wide Web Services.

  1. Последовательно выберите Панель управления > Программы > Программы и компоненты > Включение или отключение компонентов Windows (в левой части экрана).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).

  2. Разверните узел Службы IIS.Open the Internet Information Services node. Разверните узел Средства управления веб-сайтом.Open the Web Management Tools node.

  3. Установите флажок Консоль управления IIS.Check the box for IIS Management Console.

  4. Установите флажок Службы Интернета.Check the box for World Wide Web Services.

  5. В группе Службы Интернета оставьте компоненты по умолчанию или настройте компоненты IIS.Accept the default features for World Wide Web Services or customize the IIS features.

    Проверка подлинности Windows (необязательный компонент)Windows Authentication (Optional)
    Чтобы включить проверку подлинности Windows, разверните такие узлы: Службы Интернета > Безопасность.To enable Windows Authentication, expand the following nodes: World Wide Web Services > Security. Выберите компонент Проверка подлинности Windows.Select the Windows Authentication feature. Дополнительные сведения см. в статьях Windows Authentication <windowsAuthentication> (Проверка подлинности Windows ) и Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Windows Authentication <windowsAuthentication> and Configure Windows authentication.

    Протокол WebSocket (необязательный компонент)WebSockets (Optional)
    Протокол WebSocket поддерживается в ASP.NET Core начиная с версии 1.1.WebSockets is supported with ASP.NET Core 1.1 or later. Чтобы включить протокол WebSocket, разверните такие узлы: Службы Интернета > Компоненты разработки приложений.To enable WebSockets, expand the following nodes: World Wide Web Services > Application Development Features. Выберите компонент Протокол WebSocket.Select the WebSocket Protocol feature. Дополнительные сведения см. в разделе Протокол WebSocket.For more information, see WebSockets.

  6. Если во время установки IIS потребуется перезагрузка, перезагрузите систему.If the IIS installation requires a restart, restart the system.

Группы "Консоль управления IIS" и "Службы Интернета" выбраны в окне "Компоненты Windows".

Установка пакета размещения .NET CoreInstall the .NET Core Hosting Bundle

Установите пакет размещения .NET Core в размещающей системе.Install the .NET Core Hosting Bundle on the hosting system. В составе пакета устанавливаются среда выполнения .NET Core, библиотека .NET Core и модуль ASP.NET Core.The bundle installs the .NET Core Runtime, .NET Core Library, and the ASP.NET Core Module. Модуль позволяет запускать приложения ASP.NET Core под управлением IIS.The module allows ASP.NET Core apps to run behind IIS. Если система не подключена к Интернету, перед установкой пакета размещения .NET Core получите и установите Распространяемый компонент Microsoft Visual C++ 2015.If the system doesn't have an Internet connection, obtain and install the Microsoft Visual C++ 2015 Redistributable before installing the .NET Core Hosting Bundle.

Важно!

Если пакет размещения устанавливается до установки служб IIS, его нужно восстановить.If the Hosting Bundle is installed before IIS, the bundle installation must be repaired. После установки служб IIS запустите установщик пакета размещения еще раз.Run the Hosting Bundle installer again after installing IIS.

Если пакет размещения устанавливается после установки 64-разрядной (x 64) версии .NET Core, пакеты SDK могут не отображаться (см. раздел Пакеты SDK .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). Сведения об устранении проблемы см. в статье Устранение неполадок ASP.NET Core проектов.To resolve the problem, see Устранение неполадок ASP.NET Core проектов.

Прямая загрузка (текущая версия)Direct download (current version)

Скачайте установщик по следующей ссылке:Download the installer using the following link:

Текущий установщик пакета размещения .NET Core (прямая загрузка)Current .NET Core Hosting Bundle installer (direct download)

Более ранние версии установщикаEarlier versions of the installer

Получение более ранней версии установщика:To obtain an earlier version of the installer:

  1. Перейдите в архивы загрузок .NET.Navigate to the .NET download archives.
  2. В разделе .NET Core выберите версию .NET Core.Under .NET Core, select the .NET Core version.
  3. В столбце Запуск приложений — среда выполнения найдите строку, содержащую нужную версию среды выполнения .NET Core.In the Run apps - Runtime column, find the row of the .NET Core runtime version desired.
  4. Скачайте установщик по ссылке Среда выполнения и пакет размещения.Download the installer using the Runtime & Hosting Bundle link.

Предупреждение

Некоторые установщики содержат версии выпусков, которые достигли конца своего жизненного цикла и больше не поддерживаются корпорацией Майкрософт.Some installers contain release versions that have reached their end of life (EOL) and are no longer supported by Microsoft. Дополнительные сведения см. в разделе Политика поддержки.For more information, see the support policy.

Установка пакета размещения .NET CoreInstall the Hosting Bundle

  1. Запустите установщик на сервере.Run the installer on the server. При запуске установщика из командной оболочки администратора доступны следующие параметры:The following parameters are available when running the installer from an administrator command shell:

    • OPT_NO_ANCM=1 — пропуск установки модуля ASP.NET Core;OPT_NO_ANCM=1 – Skip installing the ASP.NET Core Module.
    • OPT_NO_RUNTIME=1 — пропуск установки среды выполнения .NET Core;OPT_NO_RUNTIME=1 – Skip installing the .NET Core runtime.
    • OPT_NO_SHAREDFX=1 — пропуск установки общей платформы ASP.NET (среды выполнения ASP.NET);OPT_NO_SHAREDFX=1 – Skip installing the ASP.NET Shared Framework (ASP.NET runtime).
    • OPT_NO_X86=1 — пропуск установки 32-разрядных сред выполнения.OPT_NO_X86=1 – Skip installing x86 runtimes. Этот параметр следует использовать, если вы наверняка не будете размещать 32-разрядные приложения.Use this parameter when you know that you won't be hosting 32-bit apps. Если есть хоть малейшая возможность, что в будущем придется размещать и 32-разрядные, и 64-разрядные приложения, не указывайте этот параметр и установите обе среды выполнения.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 – — отключение проверки использования общей конфигурации IIS, если файл общей конфигурации (applicationHost.config) находится на том же компьютере, что и установка 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. Доступен только для пакетных установщиков размещения ASP.NET Core 2.2 или более поздней версии.Only available for ASP.NET Core 2.2 or later Hosting Bundler installers. Дополнительные сведения можно найти по адресу: Модуль ASP.NET Core.For more information, see Модуль ASP.NET Core.
  2. Перезагрузите систему или в командой оболочке выполните команду net stop was /y, а затем — net start w3svc.Restart the system or execute net stop was /y, followed by net start w3svc from a command shell. Перезапуск служб IIS позволит обнаружить внесенные установщиком изменения в системном пути, который является переменной среды.Restarting IIS picks up a change to the system PATH, which is an environment variable, made by the installer.

Примечание

Сведения об общей конфигурации IIS см. в разделе Модуль ASP.NET Core с общей конфигурацией IIS.For information on IIS Shared Configuration, see ASP.NET Core Module with IIS Shared Configuration.

Установка веб-развертывания при публикации с помощью Visual StudioInstall Web Deploy when publishing with Visual Studio

При развертывании приложений на серверах с помощью веб-развертывания установите на сервере последнюю версию веб-развертывания.When deploying apps to servers with Web Deploy, install the latest version of Web Deploy on the server. Чтобы установить веб-развертывание, можно использовать установщик веб-платформы (WebPI) или получить установщик непосредственно в Центре загрузки Майкрософт.To install Web Deploy, use the Web Platform Installer (WebPI) or obtain an installer directly from the Microsoft Download Center. Предпочтительный метод — использовать WebPI.The preferred method is to use WebPI. WebPI обеспечивает автономную установку и настройку поставщиков размещения.WebPI offers a standalone setup and a configuration for hosting providers.

Создание сайта IISCreate the IIS site

  1. В размещающей системе создайте папку, в которой будут храниться файлы и папки опубликованного приложения.On the hosting system, create a folder to contain the app's published folders and files. На следующем этапе путь к папке предоставляется IIS как физический путь к приложению.In a following step, the folder's path is provided to IIS as the physical path to the app. Дополнительные сведения о папке развертывания и структуре файлов приложения см. в статье Структура каталогов ASP.NET Core.For more information on an app's deployment folder and file layout, see Структура каталогов ASP.NET Core.

  2. В окне диспетчера IIS на панели Подключения разверните узел сервера.In IIS Manager, open the server's node in the Connections panel. Щелкните правой кнопкой мыши папку Сайты.Right-click the Sites folder. В контекстном меню выберите пункт Добавить веб-сайт.Select Add Website from the contextual menu.

  3. Укажите имя в поле Имя сайта и задайте значение в поле Физический путь для созданной папки развертывания приложения.Provide a Site name and set the Physical path to the app's deployment folder. Укажите конфигурацию привязки и нажмите кнопку ОК, чтобы создать веб-сайт.Provide the Binding configuration and create the website by selecting OK:

    В окне "Добавить веб-сайт" укажите имя сайта, физический путь и имя узла.

    Предупреждение

    Не используйте привязки с подстановочными знаками (http://*:80/ и http://+:80) на верхнем уровне.Top-level wildcard bindings (http://*:80/ and http://+:80) should not be used. Это может создать уязвимость и поставить ваше приложение под угрозу.Top-level wildcard bindings can open up your app to security vulnerabilities. Сюда относятся и строгие, и нестрогие подстановочные знаки.This applies to both strong and weak wildcards. Вместо этого используйте имена узлов в явном виде.Use explicit host names rather than wildcards. Привязки с подстановочными знаками на уровне дочерних доменов (например *.mysub.com) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com, создающего уязвимость).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). Дополнительные сведения см. в документе rfc7230, раздел 5.4.See rfc7230 section-5.4 for more information.

  4. Разверните узел сервера и выберите Пулы приложений.Under the server's node, select Application Pools.

  5. Щелкните правой кнопкой мыши пул приложений сайта и в контекстном меню выберите пункт Основные параметры.Right-click the site's app pool and select Basic Settings from the contextual menu.

  6. В окне Изменение пула приложений задайте для параметра Версия среды CLR .NET значение Без управляемого кода.In the Edit Application Pool window, set the .NET CLR version to No Managed Code:

    Выбор значения "Без управляемого кода" для параметра "Версия среды CLR .NET".

    ASP.NET Core выполняется в отдельном процессе и управляет средой выполнения.ASP.NET Core runs in a separate process and manages the runtime. ASP.NET Core не зависит от загрузки среды CLR для ПК (.NET CLR) — для размещения приложения в рабочем процессе запускается CoreCLR для .NET Core.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. Задавать для параметра Версия среды CLR .NET значение Без управляемого кода необязательно, но рекомендуется.Setting the .NET CLR version to No Managed Code is optional but recommended.

  7. ASP.NET Core 2.2 или более поздней версии: для 64-разрядного (x64) автономного развертывания, в котором используется модель размещения в процессе, отключите пул приложений для 32-разрядных (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.

    На боковой панели Действия в разделе Пулы приложений диспетчера IIS выберите Задать значения по умолчанию для пула приложений или Дополнительные параметры.In the Actions sidebar of IIS Manager > Application Pools, select Set Application Pool Defaults or Advanced Settings. Найдите пункт Включить 32-разрядные приложения и задайте значение False.Locate Enable 32-Bit Applications and set the value to False. Этот параметр не влияет на приложения, развернутые для размещения вне процесса.This setting doesn't affect apps deployed for out-of-process hosting.

  8. Убедитесь в том, что удостоверение модели процесса имеет соответствующие разрешения.Confirm the process model identity has the proper permissions.

    При изменении удостоверения по умолчанию для пула приложений (Модель процесса > Удостоверение) с ApplicationPoolIdentity на другое, убедитесь, что у нового удостоверения есть соответствующие разрешения для доступа к папке приложения, базе данных и другим необходимым ресурсам.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. Например, пулу приложений требуются права на чтение и запись в папках, в которых приложение считывает и записывает файлы.For example, the app pool requires read and write access to folders where the app reads and writes files.

Настройка проверки подлинности Windows (необязательный этап)Windows Authentication configuration (Optional)
См. статью Configure Windows authentication in an ASP.NET Core app (Настройка проверки подлинности Windows в приложении ASP.NET Core).For more information, see Configure Windows authentication.

Развертывание приложенияDeploy the app

Разверните приложение в папке IIS, физический путь к которой вы указали в рамках раздела Создание сайта IIS.Deploy the app to the IIS Physical path folder that was established in the Create the IIS site section. Рекомендуется выполнять веб-развертывание, но есть несколько других способов переместить приложение из папки публикации проекта в папку развертывания размещающей системы.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.

Веб-развертывание с помощью Visual StudioWeb Deploy with Visual Studio

Сведения о создании профиля публикации для веб-развертывания см. в статье Профили публикации Visual Studio для развертывания приложений ASP.NET Core.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. Если поставщик услуг размещения предоставляет профиль публикации или позволяет его создать, скачайте этот профиль и импортируйте его с помощью диалогового окна Публикация в 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:

Диалоговое окно "Публикация"

Веб-развертывание вне Visual StudioWeb Deploy outside of Visual Studio

Веб-развертывание можно также использовать вне Visual Studio с помощью командной строки.Web Deploy can also be used outside of Visual Studio from the command line. Дополнительные сведения см. в статье Средство веб-развертывания.For more information, see Web Deployment Tool.

Альтернативы веб-развертываниюAlternatives to Web Deploy

Переместить приложение в размещающую систему можно несколькими способами: с помощью копирования вручную, Xcopy, Robocopy или PowerShell.Use any of several methods to move the app to the hosting system, such as manual copy, Xcopy, Robocopy, or PowerShell.

Дополнительные сведения о развертывании ASP.NET Core в службах IIS см. в разделе Ресурсы развертывания для администраторов IIS.For more information on ASP.NET Core deployment to IIS, see the Deployment resources for IIS administrators section.

Обзор веб-сайтаBrowse the website

Когда приложение будет развернуто в размещающей системе, выполните запрос к одной из общедоступных конечных точек приложения.After the app is deployed to the hosting system, make a request to one of the app's public endpoints.

В приведенном ниже примере сайт привязан к имени узла IIS www.mysite.com в порте 80.In the following example, the site is bound to an IIS Host name of www.mysite.com on Port 80. Запрос отправляется по адресу http://www.mysite.com:A request is made to http://www.mysite.com:

Начальная страница IIS, загруженная в браузере Microsoft Edge.

Заблокированные файлы развертыванияLocked deployment files

Во время выполнения приложения файлы в папке развертывания блокируются.Files in the deployment folder are locked when the app is running. Заблокированные файлы невозможно перезаписать во время развертывания.Locked files can't be overwritten during deployment. Чтобы снять блокировку с файлов в развертывании, остановите пул приложений с помощью одного из следующих методов:To release locked files in a deployment, stop the app pool using one of the following approaches:

  • Запустите веб-развертывание и добавьте ссылку на Microsoft.NET.Sdk.Web в файл проекта.Use Web Deploy and reference Microsoft.NET.Sdk.Web in the project file. Файл app_offline.htm помещается в корень каталога веб-приложения.An app_offline.htm file is placed at the root of the web app directory. Если файл присутствует, модуль ASP.NET Core корректно завершает работу приложения и обслуживает файл app_offline.htm во время развертывания.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. Дополнительные сведения см. в разделе Справочник по конфигурации модуля ASP.NET Core.For more information, see the ASP.NET Core Module configuration reference.

  • Вручную остановите пул приложений в диспетчере служб IIS на сервере.Manually stop the app pool in the IIS Manager on the server.

  • С помощью PowerShell удалите app_offline.html (требуется PowerShell 5 или более поздняя версия):Use PowerShell to drop app_offline.html (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
    
    

Защита данныхData protection

Стек защиты данных ASP.NET Core используют несколько ПО промежуточного слоя ASP.NET Core, включая ПО, которое применяется для аутентификации.The ASP.NET Core Data Protection stack is used by several ASP.NET Core middlewares, including middleware used in authentication. Даже если API-интерфейсы защиты данных не вызываются из пользовательского кода, защиту данных следует настроить для создания постоянного хранилища криптографических ключей. Это можно сделать с помощью скрипта развертывания или в пользовательском коде.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. Если защита данных не настроена, ключи хранятся в памяти и удаляются при перезапуске приложения.If data protection isn't configured, the keys are held in memory and discarded when the app restarts.

Если набор ключей хранится в памяти, при перезапуске приложения происходит следующее:If the key ring is stored in memory when the app restarts:

  • Все токены аутентификации, использующие файлы cookie, становятся недействительными.All cookie-based authentication tokens are invalidated.
  • При выполнении следующего запроса пользователю требуется выполнить вход снова.Users are required to sign in again on their next request.
  • Все данные, защищенные с помощью набора ключей, больше не могут быть расшифрованы.Any data protected with the key ring can no longer be decrypted. Это могут быть токены CSRF и файлы cookie временных данных ASP.NET Core MVC.This may include CSRF tokens and ASP.NET Core MVC TempData cookies.

Чтобы настроить защиту данных в службах IIS для хранения набора ключей, воспользуйтесь одним из следующих методов:To configure data protection under IIS to persist the key ring, use one of the following approaches:

  • Создание раздела реестра для защиты данных.Create Data Protection Registry Keys

    Ключи защиты данных, используемые приложениями ASP.NET Core, хранятся во внешнем для приложений реестре.Data protection keys used by ASP.NET Core apps are stored in the registry external to the apps. Чтобы хранить эти ключи для определенного приложения, нужно создать разделы реестра для пула приложений.To persist the keys for a given app, create registry keys for the app pool.

    При автономной установке служб IIS, не поддерживающей веб-ферму, можно выполнить скрипт PowerShell Provision-AutoGenKeys.ps1 для защиты данных применительно к каждому пулу приложений, в который входит приложение 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. Этот скрипт создает раздел в реестре HKLM, который будет доступен только для учетной записи рабочего процесса пула приложений, к которому относится соответствующее приложение.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. Неактивные ключи шифруются с помощью API защиты данных с ключом компьютера.Keys are encrypted at rest using DPAPI with a machine-wide key.

    В случаях, когда используется веб-ферма, в приложении можно настроить UNC-путь, по которому это приложение будет хранить набор ключей для защиты данных.In web farm scenarios, an app can be configured to use a UNC path to store its data protection key ring. По умолчанию ключи защиты данных не шифруются.By default, the data protection keys aren't encrypted. Разрешения на доступ к файлам в сетевой папке должны быть предоставлены только учетной записи Windows, с помощью которой выполняется приложение.Ensure that the file permissions for the network share are limited to the Windows account the app runs under. Для защиты неактивных ключей можно использовать сертификат X509.An X509 certificate can be used to protect keys at rest. Рассмотрите возможность реализации механизма, позволяющего пользователям отправлять сертификаты: поместите сертификаты в хранилище доверенных сертификатов пользователя и обеспечьте их доступность на всех компьютерах, где выполняется приложение.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. Дополнительные сведения см. в разделе Настройка защиты данных в ASP.NET Core.See Configure ASP.NET Core Data Protection for details.

  • Настройка пула приложений IIS для загрузки профиля пользователя.Configure the IIS Application Pool to load the user profile

    Этот параметр находится на странице Дополнительные параметры пула приложений в разделе Модель процесса.This setting is in the Process Model section under the Advanced Settings for the app pool. Задайте для параметра Загрузить профиль пользователя значение True.Set Load User Profile to True. Если задать значение True, ключи будут храниться в каталоге профиля пользователя и защищаться с помощью API защиты данных и ключа на уровне учетной записи пользователя.When set to True, keys are stored in the user profile directory and protected using DPAPI with a key specific to the user account. Ключи хранятся в папке %LOCALAPPDATA%/ASP.NET/DataProtection-Keys.Keys are persisted to the %LOCALAPPDATA%/ASP.NET/DataProtection-Keys folder.

    Также необходимо включить атрибут setProfileEnvironment пула приложений.The app pool's setProfileEnvironment attribute must also be enabled. Значением свойства setProfileEnvironment по умолчанию является true.The default value of setProfileEnvironment is true. В некоторых сценариях (например, в ОС Windows) для параметра setProfileEnvironment установлено значение false.In some scenarios (for example, Windows OS), setProfileEnvironment is set to false. Если ключи не хранятся в каталоге профиля пользователя:If keys aren't stored in the user profile directory as expected:

    1. Перейдите к папке %windir%/system32/inetsrv/config.Navigate to the %windir%/system32/inetsrv/config folder.
    2. Откройте файл applicationHost.config.Open the applicationHost.config file.
    3. Найдите элемент <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> .Locate the <system.applicationHost><applicationPools><applicationPoolDefaults><processModel> element.
    4. Убедитесь, что атрибут setProfileEnvironment отсутствует и установлено значение по умолчанию true, или же явно задайте для атрибута значение true.Confirm that the setProfileEnvironment attribute isn't present, which defaults the value to true, or explicitly set the attribute's value to true.
  • Использование файловой системы в качестве хранилища набора ключей.Use the file system as a key ring store

    Измените код приложения так, чтобы в качестве хранилища набора ключей использовалась файловая система.Adjust the app code to use the file system as a key ring store. Для защиты набора ключей используйте доверенный сертификат X509.Use an X509 certificate to protect the key ring and ensure the certificate is a trusted certificate. Если сертификат — самозаверяющий, поместите его в доверенное корневое хранилище.If the certificate is self-signed, place the certificate in the Trusted Root store.

    При использовании служб IIS в веб-ферме:When using IIS in a web farm:

    • используйте общую папку, которая доступна всем компьютерам;Use a file share that all machines can access.
    • разверните сертификат X509 на каждом компьютере;Deploy an X509 certificate to each machine. настройте защиту данных в коде.Configure data protection in code.
  • Настройка политики защиты данных на уровне компьютера.Set a machine-wide policy for data protection

    Система защиты данных обеспечивает ограниченную поддержку задания политики по умолчанию на уровне компьютера для всех приложений, использующих интерфейсы API защиты данных.The data protection system has limited support for setting a default machine-wide policy for all apps that consume the Data Protection APIs. Дополнительные сведения можно найти по адресу: Защита данных в ASP.NET Core.For more information, see Защита данных в ASP.NET Core.

Виртуальные каталогиVirtual Directories

Виртуальные каталоги IIS не поддерживаются в приложениях ASP.NET Core.IIS Virtual Directories aren't supported with ASP.NET Core apps. Приложение может размещаться как вложенное.An app can be hosted as a sub-application.

Вложенные приложенияSub-applications

Приложение ASP.NET Core можно разместить как вложенное приложение IIS.An ASP.NET Core app can be hosted as an IIS sub-application (sub-app). Путь к вложенному приложению становится частью URL-адреса главного приложения.The sub-app's path becomes part of the root app's URL.

Вложенное приложение не должно включать модуль ASP.NET Core в качестве обработчика.A sub-app shouldn't include the ASP.NET Core Module as a handler. Если модуль добавляется в качестве обработчика в файл web.config дочернего приложения, при попытке работы с этим приложением выводится ошибка 500.19 (внутренняя ошибка сервера) с указанием некорректного файла конфигурации.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.

Вот пример опубликованного файла web.config для дочернего приложения 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>

Размещая вложенное приложение не на основе ASP.NET Core в приложении ASP.NET Core, явным образом удалите унаследованный обработчик из файла web.config вложенного приложения.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>

В ссылках на статический ресурс во вложенном приложении следует использовать нотацию ~/.Static asset links within the sub-app should use tilde-slash (~/) notation. Такая нотация активирует вспомогательную функцию тега для добавления свойства pathbase вложенного приложения в начало отображаемой относительной ссылки.Tilde-slash notation triggers a Tag Helper to prepend the sub-app's pathbase to the rendered relative link. Для вложенного приложения с путем /subapp_path ссылка на изображение src="~/image.png" отображается как 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". ПО промежуточного слоя для обработки статических файлов в главном приложении не обрабатывает такой запрос статического файла.The root app's Static File Middleware doesn't process the static file request. Запрос обрабатывается соответствующим ПО вложенного приложения.The request is processed by the sub-app's Static File Middleware.

Если атрибуту src статического ресурса присваивается абсолютный путь (например, src="/image.png"), ссылка отображается без свойства pathbase вложенного приложения.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. ПО промежуточного слоя для обработки статических файлов в главном приложении пытается найти ресурс в корневом веб-каталоге главного приложения, что приводит к ошибке 404 — Not Found (не найдено), кроме случаев, когда статический ресурс доступен из главного приложения.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.

Для размещения приложения ASP.NET Core в качестве приложения, вложенного в другое приложение ASP.NET Core, сделайте следующее:To host an ASP.NET Core app as a sub-app under another ASP.NET Core app:

  1. Создайте пул приложений для вложенного приложения.Establish an app pool for the sub-app. Установите для параметра Версия среды CLR .NET значение Без управляемого кода, так как для размещения приложения в рабочем процессе запускается CoreCLR для .NET Core, а не среда CRL для настольных ПК (.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. Добавьте корневой веб-сайт в диспетчере служб IIS с вложенным приложением в папке внутри корневого веб-сайта.Add the root site in IIS Manager with the sub-app in a folder under the root site.

  3. Щелкните правой кнопкой мыши папку вложенного приложения в диспетчере служб IIS и выберите Convert to Application (Преобразовать в приложение).Right-click the sub-app folder in IIS Manager and select Convert to Application.

  4. В диалоговом окне Add Application (Добавление приложения) нажмите кнопку Select (Выбрать), чтобы назначить созданный пул приложений вложенному приложению.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. Нажмите кнопку ОК.Select OK.

Назначение отдельного пула приложений вложенному приложению является обязательным при использовании модели внутрипроцессного размещения.The assignment of a separate app pool to the sub-app is a requirement when using the in-process hosting model.

Дополнительные сведения о внутрипроцессной модели размещения и настройке модуля ASP.NET Core см. в статьях Модуль ASP.NET Core и Модуль ASP.NET Core.For more information on the in-process hosting model and configuring the ASP.NET Core Module, see Модуль ASP.NET Core and Модуль ASP.NET Core.

Настройка служб IIS с помощью файла web.configConfiguration of IIS with web.config

Конфигурация IIS зависит от <system.webServer> раздела web.config для сценариев IIS, предназначенных для работы приложений ASP.NET Core с помощью модуля ASP.NET Core.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. Например, конфигурация IIS работает для динамического сжатия.For example, IIS configuration is functional for dynamic compression. Если в службах IIS на уровне сервера настроено динамическое сжатие, элемент <urlCompression> в файле web.config приложения может отключить это сжатие для приложения 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.

Дополнительные сведения см. в справочнике по настройке <system.webServer>, справочнике по настройке модуля ASP.NET Core и статье Модули IIS с ASP.NET Core.For more information, see the configuration reference for <system.webServer>, ASP.NET Core Module Configuration Reference, and IIS Modules with ASP.NET Core. Сведения о настройке переменных среды для отдельных приложений, выполняющихся в изолированных пулах приложений (такая возможность поддерживается в службах IIS начиная с версии 10.0), см. в справочной документации по службам IIS, в частности в разделе AppCmd.exe статьи Environment Variables <environmentVariables> (Переменные среды ).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.

Разделы конфигурации файла web.configConfiguration sections of web.config

Разделы конфигурации приложений ASP.NET 4.x в файле web.config не используются для конфигурации приложений ASP.NET Core.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>

Для настройки приложений ASP.NET Core используются другие поставщики конфигураций.ASP.NET Core apps are configured using other configuration providers. Дополнительные сведения см. в разделе Конфигурация.For more information, see Configuration.

Пулы приложенийApplication Pools

Модель размещения определяет изоляцию пула приложений:App pool isolation is determined by the hosting model:

  • Внутрипроцессное размещение – Приложения должны работать в отдельных пулах.In-process hosting – Apps are required to run in separate app pools.
  • Внепроцессное размещение – Рекомендуем изолировать приложения друг от друга, запуская каждое из них в собственном пуле.Out-of-process hosting – We recommend isolating the apps from each other by running each app in its own app pool.

В диалоговом окне Добавление веб-сайта IIS на каждое приложение по умолчанию задан один пул приложений.The IIS Add Website dialog defaults to a single app pool per app. Если указано Имя сайта, оно автоматически переносится в текстовое поле Пул приложений.When a Site name is provided, the text is automatically transferred to the Application pool textbox. При добавлении веб-сайта создается пул приложений с именем сайта.A new app pool is created using the site name when the site is added.

При размещении на сервере множества веб-сайтов рекомендуем изолировать приложения друг от друга, запуская каждое из них в собственном пуле.When hosting multiple websites on a server, we recommend isolating the apps from each other by running each app in its own app pool. В диалоговом окне Добавить веб-сайт служб IIS такая конфигурация задана по умолчанию.The IIS Add Website dialog defaults to this configuration. Если указано Имя сайта, оно автоматически переносится в текстовое поле Пул приложений.When a Site name is provided, the text is automatically transferred to the Application pool textbox. При добавлении веб-сайта создается пул приложений с именем сайта.A new app pool is created using the site name when the site is added.

Удостоверение пула приложенийApplication Pool Identity

Учетная запись удостоверения пула приложений позволяет запускать приложение от имени уникальной учетной записи, не создавая домены или локальные учетные записи и не управляя ими.An app pool identity account allows an app to run under a unique account without having to create and manage domains or local accounts. В службах IIS начиная с версии 8.0 рабочий процесс администратора IIS (WAS) создает виртуальную учетную запись с именем нового пула приложений и по умолчанию выполняет рабочие процессы пула приложений с помощью этой учетной записи.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. В консоли управления IIS в окне Дополнительные параметры для пула приложений должно быть выбрано Удостоверение ApplicationPoolIdentity.In the IIS Management Console under Advanced Settings for the app pool, ensure that the Identity is set to use ApplicationPoolIdentity:

Диалоговое окно дополнительных параметров для пула приложений

Процесс управления IIS создает в системе безопасности Windows безопасный идентификатор с именем пула приложений.The IIS management process creates a secure identifier with the name of the app pool in the Windows Security System. С помощью этого идентификатора можно защищать ресурсы,Resources can be secured using this identity. но он не является реальной учетной записью и не отображается в консоли управления пользователями Windows.However, this identity isn't a real user account and doesn't show up in the Windows User Management Console.

Если рабочему процессу IIS требуется предоставить доступ к приложению с повышенными правами, измените список управления доступом (ACL) для каталога, содержащего приложение.If the IIS worker process requires elevated access to the app, modify the Access Control List (ACL) for the directory containing the app:

  1. Откройте проводник и перейдите к каталогу.Open Windows Explorer and navigate to the directory.

  2. Щелкните каталог правой кнопкой мыши и выберите пункт Свойства.Right-click on the directory and select Properties.

  3. На вкладке Безопасность нажмите кнопку Изменить, а затем — кнопку Добавить.Under the Security tab, select the Edit button and then the Add button.

  4. Нажмите кнопку Размещение и выберите систему.Select the Locations button and make sure the system is selected.

  5. В поле Введите имена выбираемых объектов введите IIS AppPool\<имя_пула_приложений> .Enter IIS AppPool\<app_pool_name> in Enter the object names to select area. Нажмите кнопку Проверить имена.Select the Check Names button. В случае с DefaultAppPool проверьте имена с помощью IIS AppPool\DefaultAppPool.For the DefaultAppPool check the names using IIS AppPool\DefaultAppPool. После нажатия кнопки Проверить имена в области имен объектов отобразится значение DefaultAppPool.When the Check Names button is selected, a value of DefaultAppPool is indicated in the object names area. Вручную ввести имя пула приложений в области имен объектов нельзя.It isn't possible to enter the app pool name directly into the object names area. При поиске имени объекта используйте формат IIS AppPool\<имя_пула_приложений> .Use the IIS AppPool\<app_pool_name> format when checking for the object name.

    Диалоговое окно "Выбор пользователей или групп" для папки приложения. До нажатия кнопки "Проверить имена" в области имен объектов к строке IIS AppPool" добавилось имя пула приложений, DefaultAppPool.

  6. Нажмите кнопку ОК.Select OK.

    Диалоговое окно "Выбор пользователей или групп" для папки приложения. После нажатия кнопки "Проверить имена" в области имен объектов отображается имя пула приложений, DefaultAppPool.

  7. Разрешения на чтение и выполнение предоставляются по умолчанию.Read & execute permissions should be granted by default. При необходимости предоставьте дополнительные разрешения.Provide additional permissions as needed.

Кроме того, доступ можно предоставить через командную строку, используя средство ICACLS.Access can also be granted at a command prompt using the ICACLS tool. В случае с DefaultAppPool выполняется такая команда:Using the DefaultAppPool as an example, the following command is used:

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

Дополнительные сведения об ICACLS см. здесь.For more information, see the icacls topic.

Поддержка HTTP/2HTTP/2 support

HTTP/2 поддерживается в ASP.NET Core для следующих сценариев развертывания IIS:HTTP/2 is supported with ASP.NET Core in the following IIS deployment scenarios:

  • ВнутрипроцессноIn-process
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Подключение TLS 1.2 или более поздней версии.TLS 1.2 or later connection
  • ВнепроцессноOut-of-process
    • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
    • Подключения к пограничным серверам, открытых для общего доступа, выполняются по протоколу HTTP/2, а подключения к серверу Kestrel через обратный прокси-сервер — по HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
    • Подключение TLS 1.2 или более поздней версии.TLS 1.2 or later connection

При внутрипроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol возвращает HTTP/2.For an in-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/2. При внепроцессном развертывании и установленном подключении HTTP/2 HttpRequest.Protocol возвращает HTTP/1.1.For an out-of-process deployment when an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Дополнительные сведения о внутрипроцессной и внепроцессной моделях размещения см. в статье Модуль ASP.NET Core.For more information on the in-process and out-of-process hosting models, see Модуль ASP.NET Core.

HTTP/2 поддерживается для внепроцессных развертываний, которые удовлетворяют следующим базовым требованиям:HTTP/2 is supported for out-of-process deployments that meet the following base requirements:

  • Windows Server 2016 / Windows 10 или более поздних версий; IIS 10 или более поздней версииWindows Server 2016/Windows 10 or later; IIS 10 or later
  • Подключения к пограничным серверам, открытых для общего доступа, выполняются по протоколу HTTP/2, а подключения к серверу Kestrel через обратный прокси-сервер — по HTTP/1.1.Public-facing edge server connections use HTTP/2, but the reverse proxy connection to the Kestrel server uses HTTP/1.1.
  • Целевая платформа: неприменимо к развертываниям вне процесса, так как IIS полностью обрабатывает подключение HTTP/2.Target framework: Not applicable to out-of-process deployments, since the HTTP/2 connection is handled entirely by IIS.
  • Подключение TLS 1.2 или более поздней версии.TLS 1.2 or later connection

Если установлено подключение HTTP/2, HttpRequest.Protocol возвращает HTTP/1.1.If an HTTP/2 connection is established, HttpRequest.Protocol reports HTTP/1.1.

Протокол HTTP/2 по умолчанию включен.HTTP/2 is enabled by default. Если не удается установить подключение HTTP/2, применяется резервный вариант HTTP/1.1.Connections fall back to HTTP/1.1 if an HTTP/2 connection isn't established. Дополнительные сведения о настройке HTTP/2 для развертываний IIS см. в статье об HTTP/2 в IIS.For more information on HTTP/2 configuration with IIS deployments, see HTTP/2 on IIS.

Предварительные запросы CORSCORS preflight requests

Этот раздел относится только к приложениям ASP.NET Core, предназначенным для .NET Framework.This section only applies to ASP.NET Core apps that target the .NET Framework.

Для приложения ASP.NET Core, предназначенного для .NET Framework, параметры OPTIONS не передаются в приложение по умолчанию в службах IIS.For an ASP.NET Core app that targets the .NET Framework, OPTIONS requests aren't passed to the app by default in IIS. Чтобы узнать, как настроить обработчики приложения IIS в файле web.config для передачи запросов OPTIONS, см. раздел Enable cross-origin requests in ASP.NET Web API 2. How CORS Works (Включение запросов CORS в ASP.NET Web API 2. Принцип работы 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.

Модуль инициализации приложений и время ожидания в режиме простояApplication Initialization Module and Idle Timeout

Размещение в IIS с помощью модуля ASP.NET Core версии 2:When hosted in IIS by the ASP.NET Core Module version 2:

Модуль инициализации приложенийApplication Initialization Module

Применяется к приложениям, размещенным в процессе и вне процесса.Applies to apps hosted in-process and out-of-process.

Функция инициализации приложений в IIS отправляет в приложение HTTP-запрос при запуске или перезапуске пула приложений.IIS Application Initialization is an IIS feature that sends an HTTP request to the app when the app pool starts or is recycled. Этот запрос инициирует запуск приложения.The request triggers the app to start. По умолчанию IIS отправляет запрос к корневому URL-адресу приложения (/) для его инициализации (подробные сведения о конфигурации см. в дополнительных ресурсах).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).

Убедитесь, что включена роль инициализации приложения IIS.Confirm that the IIS Application Initialization role feature in enabled:

На настольных компьютерах с Windows 7 или более поздней версии при локальном использовании IIS:On Windows 7 or later desktop systems when using IIS locally:

  1. Последовательно выберите Панель управления > Программы > Программы и компоненты > Включение или отключение компонентов Windows (в левой части экрана).Navigate to Control Panel > Programs > Programs and Features > Turn Windows features on or off (left side of the screen).
  2. Откройте Службы IIS > Службы Интернета > Компоненты разработки приложений.Open Internet Information Services > World Wide Web Services > Application Development Features.
  3. Установите флажок Инициализация приложений.Select the check box for Application Initialization.

В Windows Server 2008 R2 и более поздней версии:On Windows Server 2008 R2 or later:

  1. Откройте мастер добавления ролей и компонентов.Open the Add Roles and Features Wizard.
  2. На панели Выбор служб ролей разверните узел Разработка приложений.In the Select role services panel, open the Application Development node.
  3. Установите флажок Инициализация приложений.Select the check box for Application Initialization.

Чтобы включить модуль инициализации приложений для сайта, используйте один из следующих подходов.Use either of the following approaches to enable the Application Initialization Module for the site:

  • При использовании диспетчера IIS:Using IIS Manager:

    1. Выберите Пулы приложений на панели Подключения.Select Application Pools in the Connections panel.
    2. Щелкните пул приложений в списке правой кнопкой мыши и выберите Дополнительные параметры.Right-click the app's app pool in the list and select Advanced Settings.
    3. Для режима запуска по умолчанию задано значение OnDemand.The default Start Mode is OnDemand. Выберите для параметра Режим запуска значение AlwaysRunning.Set the Start Mode to AlwaysRunning. Нажмите кнопку ОК.Select OK.
    4. Откройте узел Сайты на панели Подключения.Open the Sites node in the Connections panel.
    5. Щелкните приложение правой кнопкой мыши и выберите Управление веб-сайтом > Дополнительные параметры.Right-click the app and select Manage Website > Advanced Settings.
    6. По умолчанию для параметра Предварительная загрузка включена установлено значение False.The default Preload Enabled setting is False. Для параметра Предварительная загрузка включена выберите значение True.Set Preload Enabled to True. Нажмите кнопку ОК.Select OK.
  • Откройте файл web.config и добавьте элемент <applicationInitialization> с параметром doAppInitAfterRestart, для которого установлено значение true, к элементам <system.webServer> в файле web.config приложения: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>
    

Время ожидания в режиме простояIdle Timeout

Применяется только к приложениям, размещенным в процессе.Only applies to apps hosted in-process.

Чтобы предотвратить переход приложения из состояния простоя, задайте для пула приложений время ожидания в режиме простоя с помощью диспетчера IIS:To prevent the app from idling, set the app pool's idle timeout using IIS Manager:

  1. Выберите Пулы приложений на панели Подключения.Select Application Pools in the Connections panel.
  2. Щелкните пул приложений в списке правой кнопкой мыши и выберите Дополнительные параметры.Right-click the app's app pool in the list and select Advanced Settings.
  3. По умолчанию для параметра Тайм-аут простоя (в минутах) установлено значение 20 минут.The default Idle Time-out (minutes) is 20 minutes. Задайте для параметра Тайм-аут простоя (в минутах) значение 0.Set the Idle Time-out (minutes) to 0 (zero). Нажмите кнопку ОК.Select OK.
  4. Перезапустите рабочий процесс.Recycle the worker process.

Чтобы не истекло время ожидания в приложениях, размещенных вне процесса, воспользуйтесь одним из таких методов:To prevent apps hosted out-of-process from timing out, use either of the following approaches:

Дополнительные ресурсы по модулю инициализации приложений и времени ожидания в режиме простояApplication Initialization Module and Idle Timeout additional resources

Ресурсы развертывания для администраторов IISDeployment resources for IIS administrators

Дополнительные сведения о службах IIS см. в документации по ним.Learn about IIS in-depth in the IIS documentation.
Документация по службам IISIIS documentation

Дополнительные сведения о моделях развертывания приложения .NET Core.Learn about .NET Core app deployment models.
Развертывание приложений .NET Core.NET Core application deployment

Сведения о том, как модуль ASP.NET Core позволяет веб-серверу Kestrel использовать IIS или IIS Express в качестве обратного прокси-сервера.Learn how the ASP.NET Core Module allows the Kestrel web server to use IIS or IIS Express as a reverse proxy server.
Модуль ASP.NET CoreASP.NET Core Module

Сведения о настройке модуля ASP.NET Core для размещения приложений ASP.NET Core.Learn how to configure the ASP.NET Core Module for hosting ASP.NET Core apps.
Справочник по конфигурации модуля ASP.NET CoreASP.NET Core Module configuration reference

Сведения о структуре каталогов опубликованных приложений ASP.NET Core.Learn about the directory structure of published ASP.NET Core apps.
Структура каталоговDirectory structure

Сведения об обнаружении активных и неактивных модулей IIS для приложения ASP.NET Core и управлении модулями IIS.Discover active and inactive IIS modules for ASP.NET Core apps and how to manage IIS modules.
Модули IISIIS modules

Сведения о диагностике проблем с развертываниями IIS приложений ASP.NET Core.Learn how to diagnose problems with IIS deployments of ASP.NET Core apps.
Устранение неполадокTroubleshoot

Распознавание распространенных ошибок при размещении приложений ASP.NET Core в IIS.Distinguish common errors when hosting ASP.NET Core apps on IIS.
Справочник по общим ошибкам для службы приложений Azure и служб IISCommon errors reference for Azure App Service and IIS

Дополнительные ресурсыAdditional resources