2015-06-03 17 views
17

Po prostu próbuję zrozumieć moją relację między webapi, webhost (iis) i owin. Napiszę moje obecne zrozumienie i proszę, żebyś mi powiedział, czy to prawda, czy nie.Relacje między Webapi, Webhost i Owin

  • WebAPI, w przeciwieństwie MVC został napisany w sposób niezależny od gospodarza. To było w czasach poprzedzających, ale najwyraźniej spodziewali się, że Owin stanie się prędzej czy później. Host niezależności oznacza głównie, że System.Web nie jest używany w dowolnym miejscu w kodzie Webapi. SystemWeb opiera się wyłącznie na usługach IIS i bez niego nie działałby. W ten sposób Webapi może być teoretycznie hostowany w dowolnym miejscu - gdy inne hosty staną się dostępne.
  • Webhost (Microsoft.Owin.Host.SystemWeb, Microsoft.AspNet.WebApi.WebHost) to warstwa pomiędzy interfejsem API wyższego poziomu (takim jak Webapi) a usługami IIS. Ponieważ Webapi początkowo był niezależny od hosta, warstwa pośrednia wymagała uruchomienia go na określonym hoście, takim jak IIS. Webhost dla Webapi (Microsoft.AspNet.WebApi.WebHost) dostarczył tę warstwę. Później pojawi się również warstwa Webhost dla Owin (Microsoft.Owin.Host.SystemWeb), która umożliwi hostowanie dowolnego Owina kompatybilnego z IIS.
  • Owin pojawił się ostatni. Zasadniczo dostarczył abstrakcję, która teoretycznie pozwoliłaby hostować dowolną kompatybilną aplikację Owin na dowolnym hoście, o ile istnieje granica między owinem a tym hostem. Owin przyszedł z Webhostem (Microsoft.Owin.Host.SystemWeb) (podobnie jak Webapi z Webhostem), który pozwalał aplikacjom Owin być hostowane na IIS. Przyszedł także z samodzielnym hostem (Microsoft.Owin.SelfHost), dzięki któremu aplikacje Owin mogły być hostowane w dowolnym pliku wykonywalnym. Jeśli chodzi o Webapi, Owin przyszedł również z hostem Owin dla Webapi (Microsoft.AspNet.WebApi.Owin), co pozwoliło na uruchomienie WebApi na stosie Owin.

Wszystkie powyższe oznacza, że ​​jeden ma dwa różne sposoby hostowania Webapi na IIS. Można to zrobić bez Owina, używając Webapi WebHost, lub można to zrobić z Owin Host dla Webapi i Webhost dla Owin.

Nuget referencje:

Czy to zrozumienie jest prawidłowy?

+0

Czy to zrozumienie jest prawidłowe? Tak. – Andrei

Odpowiedz

12

Twoje zrozumienie jest ogólnie poprawne, ale rola OWIN wydaje się być źle rozumiana. Pełniejszy timeline byłoby:

  1. OWIN Standard opracowane w celu opisania ogólnego interfejsu .NET internetową, a la WSGI/Rake/connect (first commit in 2010).
  2. ASP.NET WebAPI jest rozwijany jako niezależny od hosta, ale został wydany pod numerem https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/.
  3. Katana Projekt realizuje kilka OWIN gospodarze:
    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. adapter ASP.NET WebAPI dla OWIN jest zwolniony: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Owin.

Twój Podsumowanie:

Wszystkie powyższe oznacza, że ​​jeden ma dwa różne sposoby gospodarzem WebAPI na IIS. Można to zrobić bez Owina, używając Webapi WebHost, lub można to zrobić z Owin Host dla Webapi i Webhost dla Owin.

Chciałbym przekształcić że jako:

Wszystko powyższe oznacza, że ​​jeden ma dwa różne sposoby gospodarzem WebAPI. Można to zrobić bez Owina, używając WebAPI WebHost lub można to zrobić za pomocą OWIN adapter for WebAPI i dowolnego hosta kompatybilnego z OWIN. Opcje hostingu na IIS to Microsoft.Owin.Host.IIS i Microsoft.Owin.Host.SystemWeb. Microsoft.AspNet.WebApi.OwinSelfHost jest również dostarczany.

+2

Jedyne zastrzeżenie, które chciałbym dodać, to to, że jest * źle * do próbowania i hostowania w IIS przy użyciu Microsoft.AspNet.WebApi.Owin, chociaż większość próbek go używa - jest to po prostu dla self-hosta. Zobacz http://stackoverflow.com/questions/33402654/web-api-with-owin-throws-objectdisposedexception-for-httpmessageinvoker i podstawową odpowiedź w projekcie Katana http://aspnetwebstack.codeplex.com/workitem/2091 –

+1

@PaulHatcher Od kiedy opublikowałeś swój komentarz, inny post został napisany w tej dyskusji na CodePlex. Wskazuje ona na inną dyskusję, w której członek zespołu Katana poleca korzystanie z Microsoft.AspNet.WebApi.Owin, więc albo członek zespołu ASP.NET jest źle poinformowany i to * działa *, albo ma rację, ale działa wystarczająco dobrze. * (Poza tym nie jestem ekspertem od OWIN, ale nie ma sensu mówić "ten pakiet OWIN jest przeznaczony tylko do tego konkretnego hosta OWIN".) * – Stijn

+1

@Stijn Cóż, miałem dużo problemy ze stabilnością na dużą skalę, dopóki nie usunąłem WebApi.Owin, również dyskusja dotyczy modyfikacji nagłówków, ale ta rozmowa http://katanaproject.codeplex.com/discussions/540202, która jest źródłem, wspomina o innych problemach z poruszaniem się po tej trasie, takich jak nie obsługa routingu atrybutów WebAPI - to wszystko jest trochę mylone z żadną radą kanoniczną –

Powiązane problemy