Подтвердить что ты не робот

Что такое Kestrel (vs IIS/Express)

Что такое веб-сервер kestrel и как он относится к IIS/IIS Express?

Я прихожу от разработки приложений на IIS Express и размещения их на веб-сервере IIS. Ядро ASP.NET имеет зависимость от Microsoft.AspNetCore.Server.Kestrel, и мой запуск имеет .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Но когда я запускаю свой сайт, я все равно получаю значок IIS Express в системном трее. Кто-то спросил меня, пользуюсь ли я IIS Express или Kestrel, и я не знал, что сказать!

У меня нет кросс-платформенных требований, поскольку я разрабатываю на ПК и хосте в Azure, поэтому я смущен, если даже need Kestrel, но похоже, что нет альтернативы - даже Простейшие образцы используют Kestrel.

4b9b3361

Ответ 1

Что такое Kestrel

Это полномасштабный веб-сервер. Вы можете запустить приложение ASP.NET Core, используя только Kestrel.

Но когда я запускаю свой сайт, я все равно получаю значок IIS Express в системном трее

В вашем приложении ASP.NET, вероятно, в каталоге wwwroot вы увидите файл web.config, который содержит следующее:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>

Это HttpPlatformHandler. По сути, это то, что это делает все запросы к Kestrel. IIS Express (и IIS, если на то пошло) больше не будет запускать ASP.NET. Вместо этого они будут выступать в качестве доверенных лиц, которые просто передают запросы и ответы от Kestrel. Все еще есть преимущества использования IIS, в частности, он дает вам конфигурацию безопасности, кэширование на уровне ядра и т.д.

Ответ 2

Я хотел бы предложить альтернативный ответ, с некоторой историей, чтобы вы могли понять, почему Kestrel приходит, даже если вы используете только Windows и IIS.

В самом начале разработки ASP.NET до 2000 года, очевидно, Microsoft создала две части для размещения приложений ASP.NET WebForms,

  • Кассини, позже стал Сервер разработки ASP.NET в Visual Studio. Это полностью управляемый веб-сервер, написанный на С# на основе 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 для IIS (версия 2) может размещать среду .NET Core внутри рабочего процесса IIS (w3wp.exe), очень похожую на ASP.NET 2.x/4.x. Этот режим называется "IIS in-process hosting". Это можно рассматривать как поддержку ASP.NET в IIS версии 5.

Ну, довольно долго, но я надеюсь, что соберу все необходимые кусочки, и вам понравится читать.

Ответ 3

Из документации MS: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel - это кроссплатформенный веб-сервер для ASP.NET Core, основанный на libuv, кроссплатформенной библиотеке асинхронного ввода-вывода. Kestrel - это веб-сервер, который по умолчанию включен в шаблоны проектов ASP.NET Core.

Вы можете использовать Kestrel отдельно или с обратным прокси-сервером, таким как IIS, Nginx или Apache. Обратный прокси-сервер получает HTTP-запросы из Интернета и перенаправляет их в Kestrel после некоторой предварительной обработки.


ОБНОВЛЕНИЕ:.net core 2.1, вместо libuv Kestrel использует управляемые сокеты

Из документации asp.net core 2.1 по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration

С выпуском ASP.NET Core 2.1 транспорт по умолчанию Kestrel больше не основан на Libuv, а на управляемых сокетах.