Модели хостинга ASP.NET Core In-Process и Out-Of-Process в IIS
|
Поскольку .NET Core стал кроссплатформенным, проекты ASP.NET Core могут работать как на Windows, так и на Linux, а при развертывании на Windows они могут быть развернуты на IIS или запущены непосредственно из командной строки без использования службы IIS, благодаря включению контейнера Kestrel в состав ASP.NET Core. В состав Core входит контейнер Kestrel.
Дополнительные сведения о том, как развернуть приложение ASP.NET Core в службе IIS, см. ниже:
Развертывание ASP.NET Core на сервере IIS h ttps:// www.itsvse.com/thread-7838-1-1.html Существует две модели хостинга для развертывания ASP.NET Core на IIS: In-Process и Out-Of-Process.
Ссылка:
h ttps:// docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/in-process-hosting?view=aspnetcore-6.0&viewFallbackFrom= aspnetcore-3.1 h ttps:// docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/out-of-process-hosting?view=aspnetcore-6.0&viewFallbackFrom= aspnetcore-3.1
Модель In-Process In-Process
Начиная с ASP.NET Core 3.0, In-Process хостинг был включен по умолчанию для всех приложений, развернутых на IIS, со следующим файлом web.config:
Как вы можете видеть, hostingModel="inprocess",вместо использования Kestrel модель in-process использует новую реализацию веб-сервера IISHttpServer(), размещенную непосредственно в пуле приложений IIS, которая реализована примерно так же, как и традиционный ASP.NET, внедренный в IIS.
Следующая диаграмма иллюстрирует взаимосвязь между IIS, модулем ASP.NET Core и приложениями, размещенными в процессе:
Попробуйте зайти на сайт, вы можете увидеть сервер через заголовок ответа, как показано ниже:
Проверяю процессы через диспетчер задач, там тоже только 2 процесса, как показано ниже:
Модель внепроцессного доступа
В этой модели IIS выступает в роли обратного прокси, и при получении запроса его необходимо перенаправить в службу Kestrel, которая представляет собой кроссплатформенный веб-сервер, встроенный в приложения ASP.NET Core.
Следующая диаграмма иллюстрирует отношения между IIS, модулем ASP.NET Core и внепроцессным размещенным приложением:
Изменяем файл web.config следующим образом:
Заходим на сайт через браузер, видим, что значение сервера в заголовке ответа изменилось на Kestrel, как показано ниже:
Также проверил диспетчер задач и обнаружил 3 процесса, как показано ниже:
Резюме
В модели хостинга InProcess запросы и ответы обслуживаются через w3wp.exe или IISExpress, а в модели OutOfProcess в рабочем процессе участвует dotnet.exe. В модели хостинга InProcess используется один веб-сервер, в то время как в модели хостинга OutOfProcess могут использоваться два веб-сервера.
Очевидные причины использования новой модели In-Process заключаются в том, что она быстрее и использует меньше ресурсов, а модель хостинга InProcess обеспечивает лучшую производительность, поскольку она работает непосредственно в процессе пула приложений IIS. Внутренний HTTP-трафик и накладные расходы отсутствуют, а запросы обрабатываются немедленно.
|
Предыдущая статья: [Практика] Nginx добавляет включение протокола HTTP/2Следующая: [Перевод] Неправильно используемый HttpClient может сломать ваше программное обеспечение
|