Что такое веб-сервер 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
Kestrel, но, похоже, нет альтернативы - даже самые простые примеры используют Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. К сожалению.Ответы:
Это полноценный веб-сервер. Вы можете запустить свое приложение ASP.NET Core, используя только Kestrel.
В вашем приложении ASP.NET, вероятно, в
wwwroot
каталоге, вы увидите web.config, который содержит это:Это HttpPlatformHandler. По сути, это направляет все запросы Кестрелу. IIS Express (и IIS в этом отношении) больше не будет запускать ASP.NET. Вместо этого они будут действовать как прокси, которые просто передают запросы и ответы от Kestrel. Все еще есть преимущества использования IIS, в частности, он обеспечивает настройку безопасности, кэширование на уровне ядра и т. Д.
источник
Я хотел бы предложить альтернативный ответ с некоторой историей, чтобы вы могли понять, почему появился Kestrel, даже если вы используете только Windows и IIS.
В самом начале разработки ASP.NET до 2000 года, очевидно, Microsoft создала две части для размещения приложений ASP.NET WebForms,
HttpListener
. Конечно, поскольку это было только для разработки, многие функции никогда не были реализованы. Поскольку Microsoft сделала общедоступный исходный код Cassini доступным, появились сторонние разработчики, которые раздвоили базу кода и добавили дополнительные функции, что положило начало семейству Cassini.aspnet_wp.exe
).Поэтому для разработки веб-приложения вы используете Cassini, а для развертывания - IIS.
Введение пулов приложений в IIS 6 потребовало некоторых изменений на стороне ASP.NET, поэтому оно
aspnet_wp.exe
устарело и заменено наaspnet_isapi.dll
. Это можно рассматривать как поддержку ASP.NET в IIS версии 2. Поэтому приложения ASP.NET размещаются в рабочих процессах IISw3wp.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 все еще нужны? Это в первую очередь результат сегодняшней интернет-практики. Большинство веб-сайтов используют обратные прокси-серверы для получения запросов от ваших веб-браузеров, а затем перенаправляют их на серверы приложений в фоновом режиме.
Другой ответ уже показал ссылку на документацию 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.Ну, довольно долго, но я надеюсь, что соберу все необходимые кусочки, и вам понравится читать.
источник
Из документации MS: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
ОБНОВЛЕНИЕ: .net core 2.1, Kestrel использует вместо этого управляемые сокеты, если libuv
Из документации asp.net core 2.1 по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
источник