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

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

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

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

3 ответов


что такое Пустельга

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

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

в вашем ASP.NET приложение, вероятно, в wwwroot каталог, вы увидите веб.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, в частности, он дает вам конфигурацию безопасности, кэширование на уровне ядра и т. д.


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

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

  • Кассини, позже стал 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 (пользовательский режим lite IIS).

таким образом, во многих случаях, когда люди обвиняют, что ASP.NET медленно, они должны винить. ASP.NET на самом деле. Сам IIS без ASP.NET довольно быстро и стабилизировано, пока ASP.NET не было разработан с учетом достаточных показателей производительности (поскольку WebForms фокусирует довольно много производительности и рад).

затем в ноябре 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 ядро. Проблемы начали появляться во время разработки, поэтому позже Microsoft сделала ASP.NET модуль сердечника специфически для ASP.NET ядро. Это ASP.NET поддержка IIS версии 4.

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

обратите внимание, что Microsoft планирует (вероятно, в ASP.NET Core 2.2) некоторые огромные изменения для ASP.NET основной модуль, чтобы улучшить производительность. Этот ответ может быть обновлен снова, когда он будет выпущен.


из ms docs на: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

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

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