2016-02-25 25 views
55

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

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

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

+0

Когда у вас возник вопрос по поводу этой новой технологии, зайдите на страницу GitHub для проектов, о которых идет речь, и посмотрите на их Вики. Вы перейдете через эту страницу [Страница серверов] (https://github.com/aspnet/Home/wiki/Servers) для репо ASP.NET. – mason

+2

Конечно, тогда вы сталкиваетесь с такими вещами, как «Этот документ устарел. Для современной документации ASP.NET Core перейдите по адресу: http: // docs.asp.net'. К сожалению. – hacksalot

ответ

56

Что Kestrel

Это полномасштабная веб-сервер. Вы можете запустить приложение ASP.NET Core, используя только 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. По существу, что это делает, то вперед все просит Кестрел. IIS Express (и IIS, если на то пошло) больше не будет запускать ASP.NET. Вместо этого они будут выступать в качестве доверенных лиц, которые просто передают запросы и ответы от Kestrel. Существует еще преимущества использования IIS, в частности, это дает вам конфигурацию безопасности, кэширование на уровне ядра и т.д.

+0

отличное введение в то, что именно происходит под обложками при использовании ядра ASP.Net https://youtu.be/e2qZvabmSvo – user99513

+0

Этот ответ немного устарел из-за внедрения основного модуля ASP.NET (вместо HttpPlatformHandler). Я предложил альтернативный ответ с большим количеством историй и сопутствующих продуктов. –

1

С мс документы на: 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 после некоторой предварительной обработки .

13

Я бы хотел предложить альтернативный ответ с некоторой историей, чтобы вы могли понять, почему приходит 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, так Кассини начал показывать свой возраст, и постепенно был заменен на IIS Express (режим пользователя облегченный IIS).

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

Затем в ноябре 2014 года была анонсирована ASP.NET 5 (позже переименованная в ASP.NET Core) и стала перекрестной платформой. Очевидно, что Microsoft больше не может привязывать его к IIS. Поэтому новый дизайн должен учитывать macOS и Linux, где должны использоваться nginx/Apache или другие веб-серверы.

Я думаю, многие согласятся с тем, что 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 Core. Это поддержка ASP.NET в версии IIS 4.

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