Я хотів би запропонувати альтернативну відповідь з деякою історією, щоб ви могли зрозуміти, чому приходить Kestrel, навіть якщо ви використовуєте лише Windows та IIS.
На самому початку розробки ASP.NET до 2000 року чітко Microsoft створила дві частини для розміщення програм ASP.NET WebForms,
- Пізніше Кассіні став сервером розвитку ASP.NET у Visual Studio. Це повністю керований веб-сервер, написаний на C # на основі
HttpListener
. Звичайно, оскільки це було лише для розвитку, багато функцій так і не були реалізовані. Оскільки Microsoft зробила вихідний код Кассіні доступним для громадськості, є й треті сторони, які розщедрили кодову базу та додали додаткові функції, що запустило сім'ю Кассіні.
- Підтримка 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, тому Кассіні почав демонструвати свій вік, і поступово його замінив IIS Express (користувацький режим Lite 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 спеціально для ASP.NET Core. Це підтримка ASP.NET у версії IIS 4.
Починаючи з ASP.NET Core 2.2, основний модуль ASP.NET для IIS (версія 2) може розміщувати середовище .NET Core у робочому процесі IIS ( w3wp.exe
), що досить схоже на ASP.NET 2.x / 4.x. Цей режим називається "IIS хостинг в процесі" . Це може розглядатися як підтримка ASP.NET у версії IIS 5.
Ну, досить тривалий, але я сподіваюся, що я складу всі необхідні шматки і вам сподобається читати.