2015-06-03 2 views
17

Я просто пытаюсь завязать отношения между webapi, webhost (iis) и owin. Я напишу свое нынешнее понимание, и я прошу вас сказать мне, правильно это или нет.Взаимосвязь между Webapi, Webhost и Owin

  • WebAPI, в отличие от MVC была написана на хост-независимым способом. Это было в пред-овинские дни, но, по-видимому, они ожидали, что Овин произойдет рано или поздно. Независимость от хоста в основном означает, что System.Web не используется нигде в коде Webapi. Это System.Web, который опирается исключительно на IIS и не будет работать без него. Таким образом, Webapi может быть теоретически размещен где угодно - как только станут доступны другие хосты.
  • Веб-хост (Microsoft.Owin.Host.SystemWeb, Microsoft.AspNet.WebApi.WebHost) - это слой между API более высокого уровня (например, Webapi) и IIS. Поскольку Webapi первоначально был независимым от хоста, промежуточный уровень, необходимый для его запуска на определенном хосте, например IIS. Webhost для Webapi (Microsoft.AspNet.WebApi.WebHost) предоставил этот слой. Позже будет также уровень Webhost для Owin (Microsoft.Owin.Host.SystemWeb), который позволит размещать на IIS все, что совместимо с Owin.
  • 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.

NuGet ссылки:

Является ли это понимание правильно?

+0

Правильно ли это понимание? Да. – Andrei

ответ

12

Ваше понимание в целом правильное, но роль OWIN кажется непонятой. Более полная шкала будет:

  1. OWIN Standard разработан для описания общего .NET веб-интерфейс, а-ля WSGI/Грабли/Connect (first commit in 2010).
  2. ASP.NET WebAPI разработан не зависящим от хоста, но выпущен с https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/.
  3. Katana Проект реализует несколько Owin хостов:
    1. https://www.nuget.org/packages/Microsoft.Owin.SelfHost/
    2. https://www.nuget.org/packages/Microsoft.Owin.Host.HttpListener/
    3. https://www.nuget.org/packages/Microsoft.Owin.Host.IIS/
    4. https://www.nuget.org/packages/Microsoft.Owin.Host.SystemWeb/
  4. 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 adapter for WebAPI и любого совместимого с OWIN хоста. Варианты размещения в IIS: Microsoft.Owin.Host.IIS и Microsoft.Owin.Host.SystemWeb. Microsoft.AspNet.WebApi.OwinSelfHost.

+2

Единственное предостережение, которое я добавил бы, заключается в том, что * неправильно * пытаться и размещать в IIS, используя Microsoft.AspNet.WebApi.Owin, хотя большинство образцов используют его - это только для самообслуживания. См. Http://stackoverflow.com/questions/33402654/web-api-with-owin-throws-objectdisposedexception-for-httpmessageinvoker и базовый ответ на проект Katana. Http://aspnetwebstack.codeplex.com/workitem/2091 –

+1

@PaulHatcher. Поскольку вы отправили свой комментарий, в этом обсуждении CodePlex был сделан еще один пост. Это указывает на другое обсуждение, в котором член команды Katana дает указание использовать Microsoft.AspNet.WebApi.Owin, поэтому либо член команды ASP.NET дезинформирован, либо работает *, либо он прав, но он работает достаточно хорошо. * (Кроме того, я не эксперт по OWIN, но мне не имеет смысла говорить, что «этот пакет OWIN предназначен только для использования с этим конкретным хостом OWIN».) * – Stijn

+1

@Stijn Ну, у меня было много проблемы стабильности в масштабе до тех пор, пока я не удалил WebApi.Owin, также обсуждается вопрос о модификации заголовков, но этот разговор http://katanaproject.codeplex.com/discussions/540202, который является источником, упоминает другие проблемы с этим маршрутом, такие как нет поддержка маршрутизации атрибутов WebAPI - все это немного путается без канонических советов –

Смежные вопросы