Связь между Webapi, Webhost и Owin
Я просто пытаюсь завязать отношения между webapi, webhost (iis) и owin. Я напишу свое нынешнее понимание, и я прошу вас сказать мне, правильно это или нет.
- Webapi, в отличие от MVC, был написан независимым образом. Это было в пред-овинские дни, но, по-видимому, они ожидали, что Овин произойдет рано или поздно. Независимость от хоста в основном означает, что System.Web не используется нигде в коде Webapi. Это System.Web, который опирается исключительно на IIS и не будет работать без него. Таким образом, Webapi может быть теоретически размещен где угодно - как только станут доступны другие хосты.
- Webhost (
Microsoft.Owin.Host.SystemWeb
, Microsoft.AspNet.WebApi.WebHost
) - это слой между API более высокого уровня (например, Webapi) и IIS. Поскольку Webapi первоначально был независимым от хоста, промежуточный уровень, необходимый для его запуска на определенном хосте, например IIS. Этот Microsoft.AspNet.WebApi.WebHost
предоставил Webhost для Webapi (Microsoft.AspNet.WebApi.WebHost
). Позже будет также уровень Webhost для Owin (Microsoft.Owin.Host.SystemWeb
), который позволит размещать на IIS все, что совместимо с Owin. - Овин подошел к последнему. Это в основном обеспечило абстракцию, которая теоретически позволяла бы размещать любое совместимое с Owin приложение на любом хосте, пока существует слой между owin и этим хостом. Owin пришел с Webhost (
Microsoft.Owin.Host.SystemWeb
) (подобно тому, как Webapi пришел с Webhost), что позволило приложениям Owin размещаться в IIS. Он также поставляется с самостоятельным хостом (Microsoft.Owin.SelfHost
), который позволял приложениям Owin размещаться внутри любого исполняемого файла. Что касается Webapi, Owin также пришел с хостом Owin для Webapi (Microsoft.AspNet.WebApi.Owin
), который позволил запустить WebApi на стек Owin.
Все это означает, что у вас есть два разных способа размещения Webapi в IIS. Это можно сделать без Owin, используя Webapi WebHost, или это можно сделать с помощью Owin Host для Webapi и с Webhost для Owin.
Нугет ссылки:
Правильно ли это понимание?
Ответы
Ответ 1
Ваше понимание, как правило, правильно, но роль OWIN кажется неправильно понятой. Более полная шкала времени:
- Стандарт OWIN, разработанный для описания общего веб-интерфейса.NET, a la WSGI/Rake/Connect (первая фиксация в 2010 году).
- ASP.NET WebAPI разработан не зависящим от хоста, но выпущен с https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/.
- Проект Katana реализует несколько хостов OWIN:
- https://www.nuget.org/packages/Microsoft.Owin.SelfHost/
- https://www.nuget.org/packages/Microsoft.Owin.Host.HttpListener/
- https://www.nuget.org/packages/Microsoft.Owin.Host.IIS/
- https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/
- Выпущен адаптер ASP.NET WebAPI для OWIN: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin.
Ваше резюме:
Все это означает, что у вас есть два разных способа размещения Webapi в IIS. Это можно сделать без Owin, используя Webapi WebHost, или это можно сделать с помощью Owin Host для Webapi и с Webhost для Owin.
Я бы повторил это как:
Все это означает, что у вас есть два разных способа размещения WebAPI. Это можно сделать без Owin, используя WebAPI WebHost, или это можно сделать с помощью адаптера OWIN для WebAPI и любого совместимого с OWIN хоста. Параметры хостинга в IIS - это Microsoft.Owin.Host.IIS и Microsoft.Owin.Host.SystemWeb. Также предоставляется Microsoft.AspNet.WebApi.OwinSelfHost.