Модуль ASP.NET CoreASP.NET Core Module

Авторы: Том Дайкстра (Tom Dykstra), Рик Штраль (Rick Strahl), Крис Росс (Chris Ross), Рик Андерсон (Rick Anderson), Сураб Ширхатти (Sourabh Shirhatti), Джастин Коталик (Justin Kotalik) и Люк Лэтем (Luke Latham)By Tom Dykstra, Rick Strahl, Chris Ross, Rick Anderson, Sourabh Shirhatti, Justin Kotalik, and Luke Latham

Модуль ASP.NET Core имеет собственный модуль IIS, который подключается к конвейеру IIS для выполнения следующих задач:The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline to either:

Поддерживаемые версии Windows:Supported Windows versions:

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

При размещении в процессе модуль использует реализацию внутрипроцессного сервера для IIS — HTTP-сервер IIS (IISHttpServer).When hosting in-process, the module uses an in-process server implementation for IIS, called IIS HTTP Server (IISHttpServer).

При размещении вне процесса модуль работает только с Kestrel.When hosting out-of-process, the module only works with Kestrel. Модуль несовместим с HTTP.sys.The module is incompatible with HTTP.sys.

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

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

Чтобы настроить приложение для внутрипроцессного размещения, добавьте свойство <AspNetCoreHostingModel> к файлу проекта приложения со значением InProcess (размещение вне процесса имеет значение OutOfProcess):To configure an app for in-process hosting, add the <AspNetCoreHostingModel> property to the app's project file with a value of InProcess (out-of-process hosting is set with OutOfProcess):

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

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

Если свойство <AspNetCoreHostingModel> отсутствует в файле, значение по умолчанию — OutOfProcess.If the <AspNetCoreHostingModel> property isn't present in the file, the default value is OutOfProcess.

При внутрипроцессном размещении применимы следующие характеристики:The following characteristics apply when hosting in-process:

  • Вместо сервера Kestrel используется HTTP-сервер IIS (IISHttpServer).IIS HTTP Server (IISHttpServer) is used instead of Kestrel server. Для внутрипроцессной обработки CreateDefaultBuilder вызывает UseIIS для выполнения следующих действий:For in-process, CreateDefaultBuilder calls UseIIS to:

    • Регистрация IISHttpServer.Register the IISHttpServer.
    • Настройка порта и базового пути, которые будет прослушивать сервер при выполнении за модулем ASP.NET Core.Configure the port and base path the server should listen on when running behind the ASP.NET Core Module.
    • Настройка перехвата ошибок запуска на узле.Configure the host to capture startup errors.
  • Атрибут requestTimeout не применяется к внутрипроцессному размещению.The requestTimeout attribute doesn't apply to in-process hosting.

  • Совместное использование пула приложений среди приложений не поддерживается.Sharing an app pool among apps isn't supported. Используйте один пул приложений для каждого приложения.Use one app pool per app.

  • При использовании веб-развертывания или размещении файла app_offline.htm в развертывании вручную приложение может не завершить работу сразу при наличии открытого соединения.When using Web Deploy or manually placing an app_offline.htm file in the deployment, the app might not shut down immediately if there's an open connection. Например, подключение websocket может задерживать завершение работы приложения.For example, a websocket connection may delay app shut down.

  • Архитектура (разрядность) приложения и установленная среда выполнения (x64 или x86) должны соответствовать архитектуре пула приложений.The architecture (bitness) of the app and installed runtime (x64 or x86) must match the architecture of the app pool.

  • Если вы настраиваете узел приложения вручную с помощью WebHostBuilder (не используя CreateDefaultBuilder) и приложение запускается напрямую на сервере Kestrel (с локальным размещением), вызывайте UseKestrel перед вызовом UseIISIntegration.If setting up the app's host manually with WebHostBuilder (not using CreateDefaultBuilder) and the app is ever run directly on the Kestrel server (self-hosted), call UseKestrel before calling UseIISIntegration. Если изменить порядок, узел не запустится.If the order is reversed, the host fails to start.

  • Обнаружены отключения клиентов.Client disconnects are detected. При отключении клиента происходит отмена токена отмены HttpContext.RequestAborted.The HttpContext.RequestAborted cancellation token is cancelled when the client disconnects.

  • В ASP.NET Core 2.2.1 и более ранних версий GetCurrentDirectory возвращает рабочий каталог процесса, запущенного службами IIS, а не каталог приложения (например, C:\Windows\System32\inetsrv для w3wp.exe).In ASP.NET Core 2.2.1 or earlier, GetCurrentDirectory returns the worker directory of the process started by IIS rather than the app's directory (for example, C:\Windows\System32\inetsrv for w3wp.exe).

    Пример кода, который задает текущий каталог приложения, см. в разделе Класс CurrentDirectoryHelpers.For sample code that sets the app's current directory, see the CurrentDirectoryHelpers class. Вызовите метод SetCurrentDirectory.Call the SetCurrentDirectory method. Последующие вызовы GetCurrentDirectory возвращают каталог приложения.Subsequent calls to GetCurrentDirectory provide the app's directory.

  • При размещении в процессе AuthenticateAsync не вызывается внутри для инициализации пользователя.When hosting in-process, AuthenticateAsync isn't called internally to initialize a user. Таким образом, реализация IClaimsTransformation, используемая для преобразования утверждений после каждой проверки подлинности, не активируется по умолчанию.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. При преобразовании утверждений с реализацией IClaimsTransformation вызовите AddAuthentication для добавления служб проверки подлинности:When transforming claims with an IClaimsTransformation implementation, call AddAuthentication to add authentication services:

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

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

Чтобы настроить приложение для размещения вне процесса, используйте один из следующих подходов в файле проекта.To configure an app for out-of-process hosting, use either of the following approaches in the project file:

  • Не указывайте свойство <AspNetCoreHostingModel>.Don't specify the <AspNetCoreHostingModel> property. Если свойство <AspNetCoreHostingModel> отсутствует в файле, значение по умолчанию — OutOfProcess.If the <AspNetCoreHostingModel> property isn't present in the file, the default value is OutOfProcess.
  • Установите для свойства <AspNetCoreHostingModel> значение OutOfProcess (внутрипроцессное размещение имеет значение InProcess):Set the value of the <AspNetCoreHostingModel> property to OutOfProcess (in-process hosting is set with InProcess):
<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Сервер Kestrel используется вместо HTTP-сервера IIS (IISHttpServer).Kestrel server is used instead of IIS HTTP Server (IISHttpServer).

Для внепроцессной обработки CreateDefaultBuilder вызывает UseIISIntegration для выполнения следующих действий:For out-of-process, CreateDefaultBuilder calls UseIISIntegration to:

  • Настройка порта и базового пути, которые будет прослушивать сервер при выполнении за модулем ASP.NET Core.Configure the port and base path the server should listen on when running behind the ASP.NET Core Module.
  • Настройка перехвата ошибок запуска на узле.Configure the host to capture startup errors.

При размещении вне процесса AuthenticateAsync не вызывается внутри для инициализации пользователя.When hosting out-of-process, AuthenticateAsync isn't called internally to initialize a user. Таким образом, реализация IClaimsTransformation, используемая для преобразования утверждений после каждой проверки подлинности, не активируется по умолчанию.Therefore, an IClaimsTransformation implementation used to transform claims after every authentication isn't activated by default. При преобразовании утверждений с реализацией IClaimsTransformation вызовите AddAuthentication для добавления служб проверки подлинности:When transforming claims with an IClaimsTransformation implementation, call AddAuthentication to add authentication services:

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

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

Изменения модели размещенияHosting model changes

Если параметр hostingModel изменяется в файле web.config (как описано в разделе Конфигурация с помощью web.config), модуль перезапускает рабочий процесс для служб IIS.If the hostingModel setting is changed in the web.config file (explained in the Configuration with web.config section), the module recycles the worker process for IIS.

Для IIS Express модуль не перезапускает рабочий процесс, а запускает нормальное завершение работы текущего процесса IIS Express.For IIS Express, the module doesn't recycle the worker process but instead triggers a graceful shutdown of the current IIS Express process. Следующий запрос для приложения порождает новый процесс IIS Express.The next request to the app spawns a new IIS Express process.

Имя процессаProcess name

Process.GetCurrentProcess().ProcessName сообщает w3wp/iisexpress (внутри процесса) или dotnet (вне процесса).Process.GetCurrentProcess().ProcessName reports w3wp/iisexpress (in-process) or dotnet (out-of-process).

Модуль ASP.NET Core имеет собственный модуль IIS, который подключается к конвейеру IIS для переадресации веб-запросов в серверные приложения ASP.NET Core.The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline to forward web requests to backend ASP.NET Core apps.

Поддерживаемые версии Windows:Supported Windows versions:

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

Модуль работает только с Kestrel.The module only works with Kestrel. Модуль несовместим с HTTP.sys.The module is incompatible with HTTP.sys.

Так как приложения ASP.NET Core выполняются в процессе, отделенном от рабочего процесса IIS, этот модуль также обрабатывает управление процессами.Because ASP.NET Core apps run in a process separate from the IIS worker process, the module also 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 crashes. Это, по сути, совпадает с поведением приложений ASP.NET 4.x, выполняемых внутрипроцессно в IIS и управляемых службой активации процессов Windows (WAS).This is essentially the same behavior as seen with ASP.NET 4.x apps that run in-process in IIS that are managed by the Windows Process Activation Service (WAS).

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

Модуль 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.

Многие собственные модули, такие как проверка подлинности Windows, остаются активными.Many native modules, such as Windows Authentication, remain active. Дополнительные сведения о модулях IIS, активных с модулем ASP.NET Core, см. в разделе Модули IIS с ASP.NET Core.To learn more about IIS modules active with the ASP.NET Core Module, see Модули IIS с ASP.NET Core.

Дополнительные возможности модуля ASP.NET Core:The ASP.NET Core Module can also:

  • Задание переменных среды для рабочего процесса.Set environment variables for the worker process.
  • Внесение в журнал выходных данных stdout для хранилища файлов с целью устранения неполадок при запуске.Log stdout output to file storage for troubleshooting startup issues.
  • Переадресация токенов проверки подлинности Windows.Forward Windows authentication tokens.

Как установить и использовать модуль ASP.NET CoreHow to install and use the ASP.NET Core Module

Инструкции о том, как установить модуль ASP.NET Core, см. в разделе Установка пакета размещения .NET Core.For instructions on how to install the ASP.NET Core Module, see Install the .NET Core Hosting Bundle.

Конфигурация с помощью файла web.configConfiguration with web.config

Модуль ASP.NET Core настроен с помощью раздела aspNetCore узла system.webServer файла web.config на веб-сайте.The ASP.NET Core Module is configured with the aspNetCore section of the system.webServer node in the site's web.config file.

Следующий файл web.config публикуется для зависимого от платформы развертывания и настраивает модуль ASP.NET Core для обработки запросов к веб-сайту.The following web.config file is published for a framework-dependent deployment and configures the ASP.NET Core Module to handle site requests:

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

Следующий файл web.config опубликован для автономного развертывания.The following web.config is published for a self-contained deployment:

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

Значение false свойства InheritInChildApplications указывает, что параметры, заданные в элементе <расположение>, не наследуются приложениями, которые находятся во вложенном каталоге приложения.The InheritInChildApplications property is set to false to indicate that the settings specified within the <location> element aren't inherited by apps that reside in a subdirectory of the app.

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

Когда приложение развернуто в службе приложений Azure, путь stdoutLogFile задан как \\?\%home%\LogFiles\stdout.When an app is deployed to Azure App Service, the stdoutLogFile path is set to \\?\%home%\LogFiles\stdout. Путь сохраняет журналы stdout в папке LogFiles, расположение которой автоматически создается службой.The path saves stdout logs to the LogFiles folder, which is a location automatically created by the service.

Сведения о конфигурации дочерних приложений IIS см. здесь: Размещение ASP.NET Core в Windows со службами IIS.For information on IIS sub-application configuration, see Размещение ASP.NET Core в Windows со службами IIS.

Атрибуты элемента aspNetCoreAttributes of the aspNetCore element

АтрибутAttribute ОПИСАНИЕDescription Значение по умолчаниюDefault
arguments

Необязательный строковый атрибут.Optional string attribute.

Аргументы для исполняемого файла, указанного в атрибуте processPath.Arguments to the executable specified in processPath.

disableStartUpErrorPage

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, страница 502.5 — ошибка процесса подавляется и страница в файле web.config с кодом состояния 502 имеет более высокий приоритет.If true, the 502.5 - Process Failure page is suppressed, and the 502 status code page configured in the web.config takes precedence.

false
forwardWindowsAuthToken

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, маркер безопасности отправляется дочернему процессу, прослушивающему порт %ASPNETCORE_PORT% как заголовок "MS-ASPNETCORE-WINAUTHTOKEN" каждого запроса.If true, the token is forwarded to the child process listening on %ASPNETCORE_PORT% as a header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. Этот процесс вызывает CloseHandle по этому маркеру безопасности каждого запроса.It's the responsibility of that process to call CloseHandle on this token per request.

true
hostingModel

Необязательный строковый атрибут.Optional string attribute.

Указывает модель размещения — внутри процесса (InProcess) или вне процесса (OutOfProcess).Specifies the hosting model as in-process (InProcess) or out-of-process (OutOfProcess).

OutOfProcess
processesPerApplication

Необязательный целочисленный атрибут.Optional integer attribute.

Указывает число экземпляров процесса, заданное в параметре processPath, которое может появиться для каждого приложения.Specifies the number of instances of the process specified in the processPath setting that can be spun up per app.

†Для внутрипроцессного размещения существует ограничение: 1.†For in-process hosting, the value is limited to 1.

Параметр processesPerApplication не рекомендуется.Setting processesPerApplication is discouraged. Этот атрибут будет удален в будущем выпуске.This attribute will be removed in a future release.

По умолчанию: 1Default: 1
Минимум: 1Min: 1
Максимум: 100Max: 100
processPath

Обязательный строковый атрибут.Required string attribute.

Путь к исполняемому файлу, который запускает процесс прослушивания HTTP-запросов.Path to the executable that launches a process listening for HTTP requests. Поддерживаются относительные пути.Relative paths are supported. Если путь начинается с ., то начало пути считается относительно корневого каталога веб-сайта.If the path begins with ., the path is considered to be relative to the site root.

rapidFailsPerMinute

Необязательный целочисленный атрибут.Optional integer attribute.

Указывает количество сбоев за минуту, которыми может завершиться процесс, указанный в processPath.Specifies the number of times the process specified in processPath is allowed to crash per minute. Если этот предел превышен, модуль останавливает запуск процесса на оставшуюся часть минуты.If this limit is exceeded, the module stops launching the process for the remainder of the minute.

Не поддерживается для внутрипроцессного размещения.Not supported with in-process hosting.

По умолчанию: 10Default: 10
Минимум: 0Min: 0
Максимум: 100Max: 100
requestTimeout

Необязательный атрибут timespan.Optional timespan attribute.

Указывает продолжительность, на протяжении которой модуль ASP.NET Core ожидает ответа от процесса, прослушивающего порт %ASPNETCORE_PORT%.Specifies the duration for which the ASP.NET Core Module waits for a response from the process listening on %ASPNETCORE_PORT%.

В версиях модуля ASP.NET Core, поставляемых с выпуском ASP.NET Core 2.1 или новее, атрибут requestTimeout указывается в часах, минутах и секундах.In versions of the ASP.NET Core Module that shipped with the release of ASP.NET Core 2.1 or later, the requestTimeout is specified in hours, minutes, and seconds.

Не применяется к внутрипроцессному размещению.Doesn't apply to in-process hosting. Для внутрипроцессного размещения модуль ожидает, пока приложение не обработает запрос.For in-process hosting, the module waits for the app to process the request.

Допустимые значения для сегментов минут и секунд в строках находятся в диапазоне 0–59.Valid values for minutes and seconds segments of the string are in the range 0-59. Значение 60 для минут и секунд приведет к ошибке 500 — внутренняя ошибка сервера.Use of 60 in the value for minutes or seconds results in a 500 - Internal Server Error.

По умолчанию: 00:02:00Default: 00:02:00
Минимум: 00:00:00Min: 00:00:00
Максимум: 360:00:00Max: 360:00:00
shutdownTimeLimit

Необязательный целочисленный атрибут.Optional integer attribute.

Длительность ожидания модуля в секундах, пока произойдет правильное выключение исполняемого файла при обнаружении файла app_offline.htm.Duration in seconds that the module waits for the executable to gracefully shutdown when the app_offline.htm file is detected.

По умолчанию: 10Default: 10
Минимум: 0Min: 0
Максимум: 600Max: 600
startupTimeLimit

Необязательный целочисленный атрибут.Optional integer attribute.

Время в секундах, которое модуль ожидает, пока запустится процесс прослушивания порта исполняемого файла.Duration in seconds that the module waits for the executable to start a process listening on the port. Если этот предел превышен, модуль завершает процесс.If this time limit is exceeded, the module kills the process. Модуль пытается перезапустить процесс при получении нового запроса и будет продолжать пытаться перезапустить процесс для последующих входящих запросов, если не удается запустить приложение определенное в атрибуте rapidFailsPerMinute количество раз за последнюю минуту.The module attempts to relaunch the process when it receives a new request and continues to attempt to restart the process on subsequent incoming requests unless the app fails to start rapidFailsPerMinute number of times in the last rolling minute.

Значение 0 (ноль) не считается бесконечным временем ожидания.A value of 0 (zero) is not considered an infinite timeout.

По умолчанию: 120Default: 120
Минимум: 0Min: 0
Максимум: 3600Max: 3600
stdoutLogEnabled

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, stdout и stderr для процесса, указанного в атрибуте processPath, перенаправляются к файлу, заданному в атрибуте stdoutLogFile.If true, stdout and stderr for the process specified in processPath are redirected to the file specified in stdoutLogFile.

false
stdoutLogFile

Необязательный строковый атрибут.Optional string attribute.

Указывает относительный или абсолютный путь к файлу, для которого регистрируются stdout и stderr из процесса, указанного в processPath.Specifies the relative or absolute file path for which stdout and stderr from the process specified in processPath are logged. Относительные пути задаются относительно корневого каталога веб-сайта.Relative paths are relative to the root of the site. Любой путь, начинающийся с ., относится к корневому каталогу веб-сайта, а все остальные пути рассматриваются как абсолютные пути.Any path starting with . are relative to the site root and all other paths are treated as absolute paths. Все папки, указанные в пути, создаются модулем при создании файла журнала.Any folders provided in the path are created by the module when the log file is created. С помощью разделителей подчеркивания метка времени, идентификатор процесса и расширение файла ( .log) добавляются к последнему сегменту пути журнала stdoutLogFile.Using underscore delimiters, a timestamp, process ID, and file extension (.log) are added to the last segment of the stdoutLogFile path. Если в качестве значения задано значение .\logs\stdout, например, журнал stdout сохраняется как stdout_20180205194132_1934.log в папке журналов с датой 5 февраля 2018 г. в 19:41:32 с идентификатором процесса 1934.If .\logs\stdout is supplied as a value, an example stdout log is saved as stdout_20180205194132_1934.log in the logs folder when saved on 2/5/2018 at 19:41:32 with a process ID of 1934.

aspnetcore-stdout
АтрибутAttribute ОПИСАНИЕDescription Значение по умолчаниюDefault
arguments

Необязательный строковый атрибут.Optional string attribute.

Аргументы для исполняемого файла, указанного в атрибуте processPath.Arguments to the executable specified in processPath.

disableStartUpErrorPage

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, страница 502.5 — ошибка процесса подавляется и страница в файле web.config с кодом состояния 502 имеет более высокий приоритет.If true, the 502.5 - Process Failure page is suppressed, and the 502 status code page configured in the web.config takes precedence.

false
forwardWindowsAuthToken

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, маркер безопасности отправляется дочернему процессу, прослушивающему порт %ASPNETCORE_PORT% как заголовок "MS-ASPNETCORE-WINAUTHTOKEN" каждого запроса.If true, the token is forwarded to the child process listening on %ASPNETCORE_PORT% as a header 'MS-ASPNETCORE-WINAUTHTOKEN' per request. Этот процесс вызывает CloseHandle по этому маркеру безопасности каждого запроса.It's the responsibility of that process to call CloseHandle on this token per request.

true
processesPerApplication

Необязательный целочисленный атрибут.Optional integer attribute.

Указывает число экземпляров процесса, заданное в параметре processPath, которое может появиться для каждого приложения.Specifies the number of instances of the process specified in the processPath setting that can be spun up per app.

Параметр processesPerApplication не рекомендуется.Setting processesPerApplication is discouraged. Этот атрибут будет удален в будущем выпуске.This attribute will be removed in a future release.

По умолчанию: 1Default: 1
Минимум: 1Min: 1
Максимум: 100Max: 100
processPath

Обязательный строковый атрибут.Required string attribute.

Путь к исполняемому файлу, который запускает процесс прослушивания HTTP-запросов.Path to the executable that launches a process listening for HTTP requests. Поддерживаются относительные пути.Relative paths are supported. Если путь начинается с ., то начало пути считается относительно корневого каталога веб-сайта.If the path begins with ., the path is considered to be relative to the site root.

rapidFailsPerMinute

Необязательный целочисленный атрибут.Optional integer attribute.

Указывает количество сбоев за минуту, которыми может завершиться процесс, указанный в processPath.Specifies the number of times the process specified in processPath is allowed to crash per minute. Если этот предел превышен, модуль останавливает запуск процесса на оставшуюся часть минуты.If this limit is exceeded, the module stops launching the process for the remainder of the minute.

По умолчанию: 10Default: 10
Минимум: 0Min: 0
Максимум: 100Max: 100
requestTimeout

Необязательный атрибут timespan.Optional timespan attribute.

Указывает продолжительность, на протяжении которой модуль ASP.NET Core ожидает ответа от процесса, прослушивающего порт %ASPNETCORE_PORT%.Specifies the duration for which the ASP.NET Core Module waits for a response from the process listening on %ASPNETCORE_PORT%.

В версиях модуля ASP.NET Core, поставляемых с выпуском ASP.NET Core 2.1 или новее, атрибут requestTimeout указывается в часах, минутах и секундах.In versions of the ASP.NET Core Module that shipped with the release of ASP.NET Core 2.1 or later, the requestTimeout is specified in hours, minutes, and seconds.

По умолчанию: 00:02:00Default: 00:02:00
Минимум: 00:00:00Min: 00:00:00
Максимум: 360:00:00Max: 360:00:00
shutdownTimeLimit

Необязательный целочисленный атрибут.Optional integer attribute.

Длительность ожидания модуля в секундах, пока произойдет правильное выключение исполняемого файла при обнаружении файла app_offline.htm.Duration in seconds that the module waits for the executable to gracefully shutdown when the app_offline.htm file is detected.

По умолчанию: 10Default: 10
Минимум: 0Min: 0
Максимум: 600Max: 600
startupTimeLimit

Необязательный целочисленный атрибут.Optional integer attribute.

Время в секундах, которое модуль ожидает, пока запустится процесс прослушивания порта исполняемого файла.Duration in seconds that the module waits for the executable to start a process listening on the port. Если этот предел превышен, модуль завершает процесс.If this time limit is exceeded, the module kills the process. Модуль пытается перезапустить процесс при получении нового запроса и будет продолжать пытаться перезапустить процесс для последующих входящих запросов, если не удается запустить приложение определенное в атрибуте rapidFailsPerMinute количество раз за последнюю минуту.The module attempts to relaunch the process when it receives a new request and continues to attempt to restart the process on subsequent incoming requests unless the app fails to start rapidFailsPerMinute number of times in the last rolling minute.

Значение 0 (ноль) не считается бесконечным временем ожидания.A value of 0 (zero) is not considered an infinite timeout.

По умолчанию: 120Default: 120
Минимум: 0Min: 0
Максимум: 3600Max: 3600
stdoutLogEnabled

Дополнительный логический атрибут.Optional Boolean attribute.

Если значение равно true, stdout и stderr для процесса, указанного в атрибуте processPath, перенаправляются к файлу, заданному в атрибуте stdoutLogFile.If true, stdout and stderr for the process specified in processPath are redirected to the file specified in stdoutLogFile.

false
stdoutLogFile

Необязательный строковый атрибут.Optional string attribute.

Указывает относительный или абсолютный путь к файлу, для которого регистрируются stdout и stderr из процесса, указанного в processPath.Specifies the relative or absolute file path for which stdout and stderr from the process specified in processPath are logged. Относительные пути задаются относительно корневого каталога веб-сайта.Relative paths are relative to the root of the site. Любой путь, начинающийся с ., относится к корневому каталогу веб-сайта, а все остальные пути рассматриваются как абсолютные пути.Any path starting with . are relative to the site root and all other paths are treated as absolute paths. Все папки, указанные в пути, должны существовать, чтобы модуль мог создать файл журнала.Any folders provided in the path must exist in order for the module to create the log file. С помощью разделителей подчеркивания метка времени, идентификатор процесса и расширение файла ( .log) добавляются к последнему сегменту пути журнала stdoutLogFile.Using underscore delimiters, a timestamp, process ID, and file extension (.log) are added to the last segment of the stdoutLogFile path. Если в качестве значения задано значение .\logs\stdout, например, журнал stdout сохраняется как stdout_20180205194132_1934.log в папке журналов с датой 5 февраля 2018 г. в 19:41:32 с идентификатором процесса 1934.If .\logs\stdout is supplied as a value, an example stdout log is saved as stdout_20180205194132_1934.log in the logs folder when saved on 2/5/2018 at 19:41:32 with a process ID of 1934.

aspnetcore-stdout

Настройка переменных средыSetting environment variables

Переменные среды для процесса можно указать в атрибуте processPath.Environment variables can be specified for the process in the processPath attribute. Укажите переменную среды с дочерним элементом <environmentVariable> элемента коллекции <environmentVariables>.Specify an environment variable with the <environmentVariable> child element of an <environmentVariables> collection element. Переменные среды, установленные в этом разделе, имеют приоритет над переменными системной среды.Environment variables set in this section take precedence over system environment variables.

Переменные среды для процесса можно указать в атрибуте processPath.Environment variables can be specified for the process in the processPath attribute. Укажите переменную среды с дочерним элементом <environmentVariable> элемента коллекции <environmentVariables>.Specify an environment variable with the <environmentVariable> child element of an <environmentVariables> collection element.

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

Переменные среды, заданные в этом разделе, конфликтуют с переменными системной среды с такими же именами.Environment variables set in this section conflict with system environment variables set with the same name. Если переменная среды задана и в файле web.config, и на уровне системы в Windows, значение из файла web.config добавляется к значению переменной системной среды (например, ASPNETCORE_ENVIRONMENT: Development;Development), которая препятствует запуску приложения.If an environment variable is set in both the web.config file and at the system level in Windows, the value from the web.config file becomes appended to the system environment variable value (for example, ASPNETCORE_ENVIRONMENT: Development;Development), which prevents the app from starting.

В следующем примере устанавливаются две переменные среды.The following example sets two environment variables. ASPNETCORE_ENVIRONMENT настраивает среду приложения для Development.ASPNETCORE_ENVIRONMENT configures the app's environment to Development. Разработчик может временно задать это значение в файле web.config, чтобы принудительно загрузить Страницу исключений для разработчиков при отладке исключения приложения.A developer may temporarily set this value in the web.config file in order to force the Developer Exception Page to load when debugging an app exception. CONFIG_DIR — пример пользовательской переменной среды, где разработчик написал код, который считывает значение при запуске, чтобы сформировать путь для загрузки файла конфигурации приложения.CONFIG_DIR is an example of a user-defined environment variable, where the developer has written code that reads the value on startup to form a path for loading the app's configuration file.

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

Примечание

Вместо задания среды напрямую в web.config включите свойство <EnvironmentName> в профиль публикации ( .pubxml) или файл проекта.An alternative to setting the environment directly in web.config is to include the <EnvironmentName> property in the publish profile (.pubxml) or project file. При этом подходе во время публикации проекта среда задается в файле web.config:This approach sets the environment in web.config when the project is published:

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

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

Установите только переменную среды ASPNETCORE_ENVIRONMENT для Development на серверах промежуточных процессов и тестирования, которые недоступны для ненадежных сетей, таких как Интернет.Only set the ASPNETCORE_ENVIRONMENT environment variable to Development on staging and testing servers that aren't accessible to untrusted networks, such as the Internet.

App_offline.htmapp_offline.htm

Если в корневом каталоге приложения обнаружен файл с именем app_offline.htm, модуль ASP.NET Core пытается корректно закрыть приложение и прекратить обработку входящих запросов.If a file with the name app_offline.htm is detected in the root directory of an app, the ASP.NET Core Module attempts to gracefully shutdown the app and stop processing incoming requests. Если приложение по-прежнему выполняется через количество секунд, определенное атрибутом shutdownTimeLimit, модуль ASP.NET Core завершает выполняющийся процесс.If the app is still running after the number of seconds defined in shutdownTimeLimit, the ASP.NET Core Module kills the running process.

Хотя файл app_offline.htm присутствует, модуль ASP.NET Core отвечает на запросы, отправляя назад содержимое файла app_offline.htm.While the app_offline.htm file is present, the ASP.NET Core Module responds to requests by sending back the contents of the app_offline.htm file. Когда app_offline.htm файл удаляется, следующий запрос запускает приложение.When the app_offline.htm file is removed, the next request starts the app.

При использовании модели размещения вне процесса приложение может не завершать работу немедленно при наличии открытого соединения.When using the out-of-process hosting model, the app might not shut down immediately if there's an open connection. Например, подключение websocket может задерживать завершение работы приложения.For example, a websocket connection may delay app shut down.

Страница ошибок запускаStart-up error page

Если при внутри- или внепроцессном размещении происходит сбой запуска приложения, открываются страницы пользовательских сообщений об ошибках.Both in-process and out-of-process hosting produce custom error pages when they fail to start the app.

Если модулю ASP.NET Core не удается найти внутри- или внепроцессный обработчик запросов, откроется страница кода состояния 500.0 — ошибка загрузки внутри- или внепроцессного обработчика запросов.If the ASP.NET Core Module fails to find either the in-process or out-of-process request handler, a 500.0 - In-Process/Out-Of-Process Handler Load Failure status code page appears.

Если в модели размещения внутри процесса модулю ASP.NET Core не удается запустить приложение, откроется страница кода состояния 500.30 — ошибка запуска.For in-process hosting if the ASP.NET Core Module fails to start the app, a 500.30 - Start Failure status code page appears.

Если в модели размещения вне процесса модулю ASP.NET Core не удается запустить серверный процесс или начинается серверный процесс, но ему не удается прослушать настроенный порт, появится страница кода состояния 502.5 — ошибка процесса.For out-of-process hosting if the ASP.NET Core Module fails to launch the backend process or the backend process starts but fails to listen on the configured port, a 502.5 - Process Failure status code page appears.

Чтобы подавить отображение этой странице и вернуться к странице IIS кода состояния 5xx по умолчанию, используйте атрибут disableStartUpErrorPage.To suppress this page and revert to the default IIS 5xx status code page, use the disableStartUpErrorPage attribute. Дополнительные сведения о настройке пользовательских сообщений об ошибках см. в разделе Ошибки HTTP <httpErrors>.For more information on configuring custom error messages, see HTTP Errors <httpErrors>.

Если модулю ASP.NET Core не удается запустить серверный процесс или начинается серверный процесс, но ему не удается прослушать настроенный порт, появится страница кода состояния 502.5 — ошибка процесса.If the ASP.NET Core Module fails to launch the backend process or the backend process starts but fails to listen on the configured port, a 502.5 - Process Failure status code page appears. Чтобы подавить эту страницу и вернуться к странице IIS кода состояния 502 по умолчанию, используйте атрибут disableStartUpErrorPage.To suppress this page and revert to the default IIS 502 status code page, use the disableStartUpErrorPage attribute. Дополнительные сведения о настройке пользовательских сообщений об ошибках см. в разделе Ошибки HTTP <httpErrors>.For more information on configuring custom error messages, see HTTP Errors <httpErrors>.

Страница кода состояния "502.5 — ошибка процесса"

Создание и перенаправление журналаLog creation and redirection

Модуль ASP.NET Core перенаправляет выходные потоки консоли stdout и stderr на диск, если заданы атрибуты stdoutLogEnabled и stdoutLogFile элемента aspNetCore.The ASP.NET Core Module redirects stdout and stderr console output to disk if the stdoutLogEnabled and stdoutLogFile attributes of the aspNetCore element are set. Все папки, указанные в пути stdoutLogFile, создаются модулем при создании файла журнала.Any folders in the stdoutLogFile path are created by the module when the log file is created. Пул приложений должен иметь доступ на запись в папку, где записываются журналы (используйте атрибут IIS AppPool\<app_pool_name> для предоставления разрешения на запись).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Журналы не выполняют циклический сдвиг, пока не произойдет процесс перезапуска или перезагрузки.Logs aren't rotated, unless process recycling/restart occurs. Администратор несет ответственность за ограничение дискового пространства, которое потребляют журналы.It's the responsibility of the hoster to limit the disk space the logs consume.

Использование журнала stdout рекомендуется только для устранения неполадок при запуске приложений.Using the stdout log is only recommended for troubleshooting app startup issues. Не используйте журнал stdout для ведения общего журнала приложений.Don't use the stdout log for general app logging purposes. Для обычного входа в приложение ASP.NET Core используйте библиотеку ведения журналов, которая ограничивает размер файла журнала и выполняет циклический сдвиг журналов.For routine logging in an ASP.NET Core app, use a logging library that limits log file size and rotates logs. Дополнительные сведения см. в разделе Сторонние поставщики ведения журналов.For more information, see third-party logging providers.

При создании файла журнала автоматически добавляются отметка времени и расширение файла.A timestamp and file extension are added automatically when the log file is created. Имя файла журнала составляется путем добавления метки времени, идентификатора процесса и расширения файла ( .log) к последнему сегменту атрибута пути stdoutLogFile (обычно stdout) с символами подчеркивания в качестве разделителей.The log file name is composed by appending the timestamp, process ID, and file extension (.log) to the last segment of the stdoutLogFile path (typically stdout) delimited by underscores. Если атрибут пути stdoutLogFile заканчивается элементом stdout, журнал приложения с идентификатором 1934, созданный 5 февраля 2018 г. в 19:42:32, будет иметь имя stdout_20180205194132_1934.log.If the stdoutLogFile path ends with stdout, a log for an app with a PID of 1934 created on 2/5/2018 at 19:42:32 has the file name stdout_20180205194132_1934.log.

Если stdoutLogEnabled имеет значение false, возникающие при запуске приложения ошибки записываются и передаются в журнал событий (макс. 30 КБ).If stdoutLogEnabled is false, errors that occur on app startup are captured and emitted to the event log up to 30 KB. После запуска все дополнительные журналы удаляются.After startup, all additional logs are discarded.

В следующем примере элемент aspNetCore настраивает ведение журнала stdout для приложения, размещенного в службе приложений Azure.The following sample aspNetCore element configures stdout logging for an app hosted in Azure App Service. Для локального ведения журнала допустим локальный или общий сетевой путь.A local path or network share path is acceptable for local logging. Убедитесь, что идентификатор пользователя AppPool имеет разрешение на запись по указанному пути.Confirm that the AppPool user identity has permission to write to the path provided.

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

Расширенные журналы диагностикиEnhanced diagnostic logs

Модуль ASP.NET Core можно настроить. Он позволяет работать с расширенными журналами диагностики.The ASP.NET Core Module is configurable to provide enhanced diagnostics logs. Добавьте элемент <handlerSettings> в элемент <aspNetCore> в файле web.config. Задайте параметру debugLevel значение TRACE, чтобы обеспечить высокую точность диагностических сведений:Add the <handlerSettings> element to the <aspNetCore> element in web.config. Setting the debugLevel to TRACE exposes a higher fidelity of diagnostic information:

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

Все папки, указанные в пути (logs в приведенном выше примере), создаются модулем при создании файла журнала.Any folders in the path (logs in the preceding example) are created by the module when the log file is created. Пул приложений должен иметь доступ на запись в папку, где записываются журналы (используйте атрибут IIS AppPool\<app_pool_name> для предоставления разрешения на запись).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Папки, указанные в пути к значению <handlerSetting> (logs в приведенном выше примере), не создаются модулем автоматически и должны заранее существовать в развертывании.Folders in the path provided to the <handlerSetting> value (logs in the preceding example) aren't created by the module automatically and should pre-exist in the deployment. Пул приложений должен иметь доступ на запись в папку, где записываются журналы (используйте атрибут IIS AppPool\<app_pool_name> для предоставления разрешения на запись).The app pool must have write access to the location where the logs are written (use IIS AppPool\<app_pool_name> to provide write permission).

Значения уровня отладки (debugLevel) могут включать уровень и расположение.Debug level (debugLevel) values can include both the level and the location.

Уровни (в порядке возрастания степени детализации):Levels (in order from least to most verbose):

  • ОШИБКАERROR
  • ПРЕДУПРЕЖДЕНИЕWARNING
  • ИНФОРМАЦИЯINFO
  • TRACETRACE

Расположения (допускаются несколько расположений):Locations (multiple locations are permitted):

  • CONSOLECONSOLE
  • EVENTLOGEVENTLOG
  • FILEFILE

Параметры обработчика могут быть указаны с помощью переменных среды:The handler settings can also be provided via environment variables:

  • ASPNETCORE_MODULE_DEBUG_FILE – Путь к файлу журнала отладки.ASPNETCORE_MODULE_DEBUG_FILE – Path to the debug log file. (По умолчанию: aspnetcore debug.log)(Default: aspnetcore-debug.log)
  • ASPNETCORE_MODULE_DEBUG – Параметр уровня отладки.ASPNETCORE_MODULE_DEBUG – Debug level setting.

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

Не оставляйте ведение журнала отладки включенным в развертывании дольше того времени, которое требуется для устранения проблемы.Do not leave debug logging enabled in the deployment for longer than required to troubleshoot an issue. Размер журнала не ограничен.The size of the log isn't limited. Если оставить журнал отладки включенным, он может исчерпать все доступное место на диске и привести к сбою сервера или службы приложений.Leaving the debug log enabled can exhaust the available disk space and crash the server or app service.

См. пример элемента aspNetCore в файле web.config в разделе Конфигурация с помощью файла web.config.See Configuration with web.config for an example of the aspNetCore element in the web.config file.

Изменение размера стекаModify the stack size

Настройте размер управляемого стека, задав для параметра stackSize значение в байтах.Configure the managed stack size using the stackSize setting in bytes. Размер по умолчанию — 1048576 байт (1 МБ).The default size is 1048576 bytes (1 MB).

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

Конфигурация прокси-сервера использует протокол HTTP и токен связыванияProxy configuration uses HTTP protocol and a pairing token

Применяется только к размещению вне процесса.Only applies to out-of-process hosting.

Прокси-сервер, созданный между модулем ASP.NET Core и Kestrel, использует протокол HTTP.The proxy created between the ASP.NET Core Module and Kestrel uses the HTTP protocol. Использование HTTP позволяет оптимизировать производительность, так как трафик между модулем и Kestrel передается на петлевой адрес в сетевом интерфейсе.Using HTTP is a performance optimization, where the traffic between the module and Kestrel takes place on a loopback address off of the network interface. Отсутствует риск перехвата трафика между модулем и Kestrel из расположения на сервере.There's no risk of eavesdropping the traffic between the module and Kestrel from a location off of the server.

Токен связывания гарантирует, что полученные Kestrel запросы были переданы службами IIS, а не из какого-либо другого источника.A pairing token is used to guarantee that the requests received by Kestrel were proxied by IIS and didn't come from some other source. Этот токен создается и задается модулем в переменную среды (ASPNETCORE_TOKEN).The pairing token is created and set into an environment variable (ASPNETCORE_TOKEN) by the module. Он также задается в заголовке (MS-ASPNETCORE-TOKEN) каждого запроса, переданного через прокси-сервер.The pairing token is also set into a header (MS-ASPNETCORE-TOKEN) on every proxied request. ПО промежуточного слоя IIS проверяет каждый получаемый запрос, чтобы убедиться, что заголовок с токеном связывания соответствует значению переменной среды.IIS Middleware checks each request it receives to confirm that the pairing token header value matches the environment variable value. Если значения токена не совпадают, запрос заносится в журнал и отклоняется.If the token values are mismatched, the request is logged and rejected. Переменная среды с токеном связывания и трафик между модулем и Kestrel недоступны из расположения на сервере.The pairing token environment variable and the traffic between the module and Kestrel aren't accessible from a location off of the server. Не зная значение токена связывания, злоумышленник не может отправлять запросы, обходящие проверку в ПО промежуточного слоя IIS.Without knowing the pairing token value, an attacker can't submit requests that bypass the check in the IIS Middleware.

Модуль ASP.NET Core с общей конфигурацией IISASP.NET Core Module with an IIS Shared Configuration

Программа установки модуля ASP.NET Core запускается с правами учетной записи TrustedInstaller.The ASP.NET Core Module installer runs with the privileges of the TrustedInstaller account. Поскольку учетная запись локальной системы не имеет разрешения на изменение пути к общей папке, используемого общей конфигурацией IIS, установщик получает ошибку отказа в доступе при попытке настроить параметры модуля в файле applicationHost.config общей папки.Because the local system account doesn't have modify permission for the share path used by the IIS Shared Configuration, the installer throws an access denied error when attempting to configure the module settings in the applicationHost.config file on the share.

При использовании общей конфигурации IIS на том же компьютере, где установлены службы IIS, запустите установщик пакета размещения ASP.NET Core с параметром OPT_NO_SHARED_CONFIG_CHECK со значением 1:When using an IIS Shared Configuration on the same machine as the IIS installation, run the ASP.NET Core Hosting Bundle installer with the OPT_NO_SHARED_CONFIG_CHECK parameter set to 1:

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

Если путь к общей конфигурации не на том же компьютере, где установлены службы IIS, выполните следующие действия.When the path to the shared configuration isn't on the same machine as the IIS installation, follow these steps:

  1. Отключите общую конфигурацию IIS.Disable the IIS Shared Configuration.
  2. Запустите установщик.Run the installer.
  3. Экспортируйте обновленный файл applicationHost.config в общую папку.Export the updated applicationHost.config file to the share.
  4. Повторно включите общую конфигурацию IIS.Re-enable the IIS Shared Configuration.

При использовании общей конфигурации IIS выполните следующие действия.When using an IIS Shared Configuration, follow these steps:

  1. Отключите общую конфигурацию IIS.Disable the IIS Shared Configuration.
  2. Запустите установщик.Run the installer.
  3. Экспортируйте обновленный файл applicationHost.config в общую папку.Export the updated applicationHost.config file to the share.
  4. Повторно включите общую конфигурацию IIS.Re-enable the IIS Shared Configuration.

Версия модуля и журналы установщика хостинга BundleModule version and Hosting Bundle installer logs

Чтобы определить версию установщика модуля ASP.NET Core, выполните следующие действия.To determine the version of the installed ASP.NET Core Module:

  1. В системе размещения перейдите к папке %windir%\System32\inetsrv.On the hosting system, navigate to %windir%\System32\inetsrv.
  2. Найдите файл aspnetcore.dll.Locate the aspnetcore.dll file.
  3. Щелкните правой кнопкой мыши файл и выберите Свойства из контекстного меню.Right-click the file and select Properties from the contextual menu.
  4. Выберите вкладку Сведения. Версия файла и Версия продукта дают представление об установленной версии модуля.Select the Details tab. The File version and Product version represent the installed version of the module.

Журналы установщика хостинга Bundle для модуля находятся в папке C:\Users\%UserName%\AppData\Local\Temp. Этот файл имеет имя dd_DotNetCoreWinSvrHosting__<timestamp>_000_AspNetCoreModule_x64.log.The Hosting Bundle installer logs for the module are found at C:\Users\%UserName%\AppData\Local\Temp. The file is named dd_DotNetCoreWinSvrHosting__<timestamp>_000_AspNetCoreModule_x64.log.

Модуль, схемы и расположение файлов конфигурацииModule, schema, and configuration file locations

ModuleModule

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

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

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

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

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

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

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

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

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

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

СхемаSchema

Службы IISIIS

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

IIS ExpressIIS Express

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

Параметр ConfigurationConfiguration

Службы IISIIS

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

IIS ExpressIIS Express

  • Visual Studio: {КОРЕНЬ ПРИЛОЖЕНИЯ}\.vs\config\applicationHost.configVisual Studio: {APPLICATION ROOT}\.vs\config\applicationHost.config

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

Файлы можно найти путем поиска aspnetcore в файле applicationHost.config.The files can be found by searching for aspnetcore in the applicationHost.config file.

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