Я хотел бы предложить альтернативный ответ с некоторой историей, чтобы вы могли понять, почему появился Kestrel, даже если вы используете только Windows и IIS.
В самом начале разработки ASP.NET до 2000 года, очевидно, Microsoft создала две части для размещения приложений ASP.NET WebForms,
- Кассини, позже стал Сервер разработки ASP.NET в Visual Studio. Это полностью управляемый веб-сервер, написанный на C # на основе
HttpListener
. Конечно, поскольку это было только для разработки, многие функции никогда не были реализованы. Поскольку Microsoft сделала общедоступный исходный код Cassini доступным, появились сторонние разработчики, которые раздвоили базу кода и добавили дополнительные функции, что положило начало семейству Cassini.
- Поддержка ASP.NET в IIS (ревизия 1). Поскольку IIS был 4.0 и 5.0 / 5.1 в то время, который не имеет ничего общего с пулами приложений, ASP.NET даже имеет свой собственный рабочий процесс (
aspnet_wp.exe
).
Поэтому для разработки веб-приложения вы используете Cassini, а для развертывания - IIS.
Введение пулов приложений в IIS 6 потребовало некоторых изменений на стороне ASP.NET, поэтому оно aspnet_wp.exe
устарело и заменено на aspnet_isapi.dll
. Это можно рассматривать как поддержку ASP.NET в IIS версии 2. Поэтому приложения ASP.NET размещаются в рабочих процессах IIS w3wp.exe
.
Внедрение интегрированного конвейера в IIS 7 и выше потребовало дальнейших изменений, которые заменили aspnet_isapi.dll
на webengine4.dll
. Это можно рассматривать как поддержку ASP.NET в IIS версии 3. Конвейеры ASP.NET и IIS объединены.
Вы можете видеть, что ASP.NET стал намного более сложным и тесно интегрированным с IIS, поэтому Cassini начал показывать свой возраст и постепенно был заменен IIS Express (пользовательский режим облегченного IIS).
Таким образом, во многих случаях, когда люди обвиняют IIS в медленной работе, они должны обвинять ASP.NET в действительности. Сам IIS без ASP.NET довольно быстрый и стабильный, в то время как ASP.NET не разрабатывался с учетом достаточных показателей производительности (так как WebForms фокусирует довольно много производительности и RAD).
Затем в ноябре 2014 года было объявлено, что ASP.NET 5 (позже переименованный в ASP.NET Core) стал кроссплатформенной технологией. Очевидно, что Microsoft нужен был новый дизайн для поддержки Windows, macOS и Linux, где следует рассмотреть все основные веб-серверы, nginx / Apache (или другие веб-серверы), кроме IIS.
Думаю, многие согласятся с тем, что Microsoft многому научилась у NodeJS, а затем спроектировала и разработала Kestrel (на основе libuv
изначально, но вскоре может перейти на другие технологии). Первоначально это был легкий веб-сервер, такой как Cassini, но позже добавляются дополнительные функции (как в другом ответе, гораздо больше функций можно рассматривать как полноценный веб-сервер). Несмотря на то, что он полностью управляем (существуют некоторые нативные зависимости), он больше не является игрушечным веб-сервером, таким как Cassini.
Тогда почему вы не можете просто использовать Kestrel? Почему IIS Express и потенциально IIS, nginx или Apache все еще нужны? Это в первую очередь результат сегодняшней интернет-практики. Большинство веб-сайтов используют обратные прокси-серверы для получения запросов от ваших веб-браузеров, а затем перенаправляют их на серверы приложений в фоновом режиме.
- IIS Express / IIS / nginx / Apache - это обратные прокси-серверы
- Kestrel / NodeJS / Tomcat и т. Д. Являются серверами приложений
Другой ответ уже показал ссылку на документацию Microsoft, так что вы можете посмотреть.
Microsoft изначально разработала HttpPlatformHandler, чтобы сделать IIS достаточно хорошим обратным прокси-сервером для Java / Python и т. Д., Поэтому планировала использовать его для ASP.NET Core. Проблемы начали появляться во время разработки, поэтому позже Microsoft сделала модуль ASP.NET Core специально для ASP.NET Core. Это поддержка ASP.NET в IIS версии 4.
Начиная с ASP.NET Core 2.2, ASP.NET Core Module для IIS (версия 2) может размещать среду .NET Core внутри рабочего процесса IIS ( w3wp.exe
), очень похожую на ASP.NET 2.x / 4.x. Этот режим называется «IIS in-process hosting» . Это можно рассматривать как поддержку ASP.NET в IIS версии 5.
Ну, довольно долго, но я надеюсь, что соберу все необходимые кусочки, и вам понравится читать.