Andriy Shyrokoryadov

.Net developer, data scientist

№6 Сервер приложения Asp.Net Core [#56].

Текст к видео "Сервер приложения Asp.Net Core" на канале YouTube

Приветствую Вас на моем канале. Сегодня мы познакомимся с серверами которые используются в приложении ASP.NET Core и в каких режимах они могут работать.

Приложение ASP.NET Core работает с встроенной реализацией сервера HTTP. Реализация сервера ожидает получение запросов HTTP и передает эти запросы далее в приложение ASP.NET Core в видео объекта с различными параметрами. Данный объект является объектом класса HttpContext. Объект данного типа был представлен в видео на тему связующих программных компонентов. Ссылка на данное видео будет в описании к данному видео и в верхнем углу экрана.

В зависимости от того, в какой операционной системе (Windows, Mac или Linux) Ваше приложение будет запущено вам будут доступны разные возможности. Больше всего возможностей можно получить, используя приложение ASP.NET Core в среде Windows. В средах Mac или Linux мы можем использовать только сервер Kestrel. Данный сервер также доступен в среде Windows, поэтому его и другие сервера мы рассмотрим с точки зрения использования нашего приложения в операционной системе Windows.

Приложение ASP.NET Core в среде Windows поставляется со следующими серверами:

  • Сервер Kestrel – это сервер по умолчанию, кроссплатформенный сервер HTTP. Kestrel обеспечивает высокую производительность работы, а также эффективную обработку памяти, однако у него нет некоторых продвинутых функций по сравнению с сервером HTTP.sys.
  • IIS HTTP сервер в виде встроенного процесса IIS.
  • HTTP.sys сервер – это сервер HTTP в системе Windows не связанный функционально с сервером IIS и независящий от него.

Если мы используем сервер IIS, то наше приложение может быть запущено и работать 2 способами:

  • Наше приложение будет работать в том же процессе что и рабочий процесс IIS. Это так называемый встроенный в IIS процесс. Данный метод является рекомендуемым.
  • В виде отдельного процесса вне рабочего процесса сервера IIS.

Если мы сравним сервер Kestrel с сервером HTTP.sys, то сервер Kestrel будет иметь как преимущества, так и недостатки:

  • Высокая общая производительность или более эффективная работа с памятью.
  • Кроссплатформенность
  • Сервер Kestrel разрабатывается и обновляется отдельно от операционной.
  • Программная конфигурация портов и TLS
  • Расширяемость функциональности.

Http.Sys имеет некоторые продвинутые функции, которые отсутствуют в сервере Kestrel:

  • Деление портов
  • Аутентификация Windows на уровне ядра. Kestrel поддерживает аутентификация только на уровне пользователей.
  • Непосредственная передача файлов
  • Кэширование ответов на запросы

Сервер Kestrel поддерживает 2 возможности использования:

  • По умолчанию сервер Kestrel это крайний сервер, который обслуживает запросы непосредственно из сети, включая Internet.

alt text

  • В виде обратного прокси сервера Internet Information Services (IIS), Nginx, или Apache. Обратный прокси сервер получает HTTP запросы из сети перенаправляет их в сервер Kestrel.

alt text

Если приложение ASP.NET Core работает в среде Windows, HTTP.sys является альтернативой серверу Kestrel. Хотя Kestrel и является рекомендованным сервером по сравнению с HTTP.sys, возможно вам будет необходима функциональность, которая есть в сервере HTTP.sys и которой нет в Kestrel.

alt text

Сервер HTTP.sys также может быть использован для приложение, которые обслуживают запросы из сети интернет.

alt text

Если по какой-то причине вам не подошли предложенные варианты, вы всегда можете написать свою собственную имплементацию сервера HTTP. С этой цель можно использовать примеры имплементаций OWIN. OWIN – это аббревиатура с английского Open Web Interface for .NET: открытый веб интерфейс для .NET. Для того чтобы написать свой собственный сервер с минимально доступной функциональностью, необходимо реализовать интерфейсы IHttpRequestFeature и IHttpResponseFeature.

Сервер приложение ASP.NET Core запускается, когда среда разработки, IDE запускает приложение. Например, если речь идет о Visual Studio, то когда мы нажимаем кнопку Run наш приложение запускается вместе с сервером. Здесь мы можем использовать профили запуска, или на английском языке launch profiles. В профилях запуска определяется как наше приложение должно быть запущено: внутри IIS Express или в виде консольного приложения.

Когда мы запускаем приложение из командной строки в папке проекта, команда dotnet run запускает приложение и сервер (это касается только серверов Kestrel и HTTP.sys). При запуске можно указать конфигурацию параметром -c|–configuration, значение которого может быть Debug (по умолчанию) и Release.

Файл launchSettings.json содержит конфигурацию, которая может быть использована для запуска приложения из командной строки или из среды разработки такой как Visual Studio. Если в данном файле есть профили запуска, то можно использовать параметр –launch-profile {PROFILE NAME} с командой dotnet run или выбрать определенный профиль при запуске из Visual Studio.

Это было всё что я хотел сказать на тему серверов. В практике скорей всего решение какой сервер использовать и как его настраивать скорей всего уже было принято до вас и непосредственно настройкой сервер вы заниматься не будете. Однако общее понимание как работает приложение ASP.NET Core и как оно обслуживает запросы вам необходимо. Я надеюсь, что вам данное видео было вам полезно и вы узнали для себя что-то новое. Если это так, то будут благодарен за лайк, подписку и положительный комментарий. Спасибо за внимание и до новых встреч.

Пример кода из видео на GitHub

Для открытия файла проекта необходимо Visual Studio 2019.