Kiedy powinienem używać OWIN Katana?

270

Jestem nowy w OWIN i Katanie. Naprawdę nie rozumiem, dlaczego powinienem używać OWIN, podczas gdy mogę korzystać IIS. Upraszczając, moje pytanie brzmi: co stracę, jeśli pominę naukę OWIN i użyję usług IIS na swoich stronach?

Poszukałem google, ale nie ma prostego wyjaśnienia. Istnieją pewne informacje tutaj , ale oni korzystać z niektórych fraz żargon, więc nie mogę tego zrozumieć.

Seyed Morteza Mousavi
źródło
2
Zastanawiam się, na ile wpływ na kierunek OWIN ma IoT. Naprawdę nie możemy przykleić IIS do Arduino.
Sentinel,

Odpowiedzi:

279

W asp.net WebApi v2 potok OWIN staje się domyślny. W końcu będzie to standardowy potok w ramach każdego projektu asp.net.

Nie potrafię tego lepiej ująć niż tutaj: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

Sekcja „Otwarty interfejs sieciowy dla platformy .NET (OWIN)” doskonale wyjaśnia cele OWIN.

Bez OWIN bity asp.net są sprzężone ze sposobem, w jaki IIS komunikuje się z aplikacją. OWIN streszcza serwery i komponenty frameworka. Oznacza to, że Twój kod aplikacji będzie teraz świadomy interfejsu OWIN, ale nie serwera, który obsługuje żądanie.

W zamian aplikacje można łatwiej przenosić między hostami i potencjalnie całymi platformami / systemami operacyjnymi. Na przykład możliwość hostowania aplikacji w konsoli lub dowolnym procesie pozwala Mono na hostowanie jej bez wysiłku ... (Raspberry Pi ktokolwiek)

Drugim aspektem jest to, że działa jako potok.


Owin Pipeline


Możesz podłączyć dowolne oprogramowanie pośrednie (i tyle, ile chcesz) między serwerem WWW a aplikacją.
Pozwala to na bardziej modułowe rozwiązania. Możesz opracowywać redystrybucyjne oprogramowanie pośrednie, które może wpływać na żądanie / odpowiedź przychodzące do / z aplikacji, ale oddziel te moduły od kodu aplikacji.

Aby przekonać się o zaletach tego modułowego podejścia, spójrz na pakiety nuget dostępne dla OWIN: http://www.nuget.org/packages?q=owin

Wiele z tych pakietów było wcześniej podstawową funkcjonalnością asp.net i zostało wyodrębnionych jako oprogramowanie pośrednie.
Na przykład dodanie obsługi logowania przy użyciu różnych dostawców protokołu OAuth staje się problemem infrastrukturalnym (oprogramowanie pośrednie) i nie musi już być częścią kodu aplikacji:

Lub jeśli chcesz automatycznie zastąpić wszystkie obrazy ze swojej witryny obrazkami uroczych kotów, możesz to również zrobić w przejrzysty sposób:

https://github.com/serbrech/Owin.Catify

EDYCJA: Jest teraz dostępny jako pakiet nuget : Owin.Catify !

Stéphane
źródło
Twoja odpowiedź z pewnością jest dobra, ponieważ została oceniona, ale trudno mi ją rozgryźć.
Seyed Morteza Mousavi
5
Jak mogę to poprawić? Czego nie rozumiesz
Stéphane
1
Chociaż OWIN ma zalety, wydaje się trudne do debugowania, ponieważ przepływ wykonywania skutecznie „przeskakuje” od oprogramowania pośredniego do oprogramowania pośredniego. Każdy potencjalnie zmienia odpowiedź po drodze. Debuger dołączania programu Visual Studio nie wydaje się być w stanie śledzić przepływu. A kiedy wystąpi wyjątek (w aplikacji internetowej), otrzymasz pustą stronę z odpowiedzią 200 OK. Brak błędów poza dziennikiem zdarzeń systemu Windows.
simbolo
7
Uznałem, że wyjaśnienie na weblogs.asp.net/pglavich/owin-katana-and-getting-started jest przydatne. Jest to sposób na oddzielenie aplikacji od usług IIS i zależności od zestawu System.Web. Zmniejszenie ilości komponentów znajdujących się w potoku HTTP, dzięki czemu aplikacja jest lekka.
Terence
2
Muszę dodać, że w moim obecnym środowisku niektóre zespoły używają WebApi, a niektóre Nancy. Ponieważ oba są oparte na OWIN, możemy udostępniać oprogramowanie pośrednie, takie jak obsługa klucza API lub Stateless Authentication, niezależnie od frameworka. Pozwalamy zespołowi wybrać to, co najbardziej mu odpowiada. To jest prawdziwa zaleta OWIN.
Stéphane
209
public interface OWIN
{
   void ListenHttpCallAndServeWebPage();    
}

namespace Microsoft.OWIN
{
   public class Katana : OWIN
   {
      public void ListenHttpCallAndServeWebPage()
      {
         // listen to a port for HTTP call and serve web page
      } 
   }
}

Tak to prawda. OWIN to interfejs, a Katana to implementacja interfejsu OWIN przez Microsoft . Dlatego słyszymy te 2 słowa (OWIN / KATANA) razem i często mylimy się między różnicą między tymi 2 terminami. Katana to implementacja interfejsu OWIN firmy Microsoft. Powiedzmy, że istnieje inna firma o nazwie BIG-BOSS, która chciała stworzyć własną implementację OWIN, może to zrobić i nazwać swoją implementację „BATANA” oraz reklamować frazy takie jak OWIN / BATANA.

Dlaczego więc OWIN !!!

Pomyśl o kraju, w którym jedynym pojazdem dostępnym do ruchu jest ciężarówka. Nic więcej. Jeśli chcesz kupić pojazd, kupisz ciężarówkę. Kiedyś dobrze to służyło, ale ludzie zaczęli zdawać sobie z tego sprawę, że nie potrzebują ciągłej ciężarówki, zwłaszcza gdy chcą iść obejrzeć film lub kupić mleko, jazda ciężką ciężarówką kosztuje nie tylko wysokie paliwo, ale także dodać stres podczas jazdy. Ale tak, jeśli chcą przewozić dużo ciężkich rzeczy, ciężarówka bardzo dobrze służy temu celowi.

Następnie rząd tego kraju opracował specyfikację dla producentów pojazdów. Specyfikacja jest następująca:

  1. Pojazd musi mieć 4 koła
  2. Pojazd musi mieć układ kierowniczy.
  3. Pojazd musi mieć reflektory i światła sygnalizacyjne.

Na podstawie tych specyfikacji każdy może wykonać pojazd według różnych potrzeb i odpowiednio nazwać swój pojazd. Dlatego Sedan, Pickup Truck, SUV, VAN, ..etc .. wszelkiego rodzaju pojazd pojawił się na rynku. Jeśli ktoś nie musi cały czas nosić ciężkich rzeczy, a raczej potrzebuje pojazdu tylko do pracy, może kupić małego sedana. Ktoś może kupić SUV, jeśli potrzebuje niewiele więcej mocy.

Na podstawie powyższego przykładu możemy powiedzieć, że nasza aplikacja sieci Web ASP.NET korzysta z mocno obciążonego zestawu System.Web (takiego jak ciężarówka) i jeśli chcemy stworzyć małą aplikację internetową, w której naszym celem jest po prostu obsługa niektórych plików na niewielkim zestawie żądań jesteśmy zobowiązani do użycia tego ciężkiego zestawu System.Web (ciężarówka). Teraz pojawia się OWIN. OWIN to zestaw specyfikacji (możemy to nazwać interfejsem) definiujący serwer. W oparciu o tę specyfikację ktoś (np. Producent pojazdu) może tworzyć różnego rodzaju serwery w oparciu o określone domeny problemowe / potrzeby aplikacji. Microsoft stworzył własną implementację dla OWIN o nazwie Katana w ten sam sposób, który może obsługiwać interfejs API sieci Web. Ponieważ WebAPI to lekka technologia, która nie wymaga w pełni rozwiniętego systemu.

Teraz, jeśli zapytacie: „ Czy potrzebuję tego?„? Odpowiedź brzmi: „To zależy od twojej potrzeby wydajności”. Jeśli nie masz nic przeciwko prowadzeniu ciężarówki nawet na obejrzenie filmu, być może nie potrzebujesz OWIN. Ale jeśli uważasz, że lekki samochód Sedan to wszystko, czego potrzebujesz, aby jechać w mieście, na niewielką odległość, obejrzeć film ... itd. Tak, możesz sprawdzić, jakie wdrożenia OWIN są dostępne na rynku. Katana jest jedną z implementacji OWIN, dlatego możesz sprawdzić, co oferuje Katana. Nie tylko Katana, jeśli jakakolwiek inna firma wdraża OWIN zgodnie z określoną domeną (na przykład serwer urządzeń medycznych, który pobierze najnowsze informacje o medycynie), a jeśli jesteś lekarzem, być może możesz sprawdzić wdrożenie OWIN. Co więcej, możesz sam stworzyć własną implementację OWIN, kierując ją do dowolnej konkretnej niszy.

Jeśli chodzi o aplikacje internetowe, jeśli jesteś prostym programistą WWW, opracowując niestandardowe strony internetowe dla swoich klientów, być może nie musisz martwić się niestandardową implementacją OWIN, ponieważ IIS będą Ci służyć w zrównoważony sposób. Jeśli zbudujesz projekt Web API, otrzymasz gotowy szablon oparty na Katanie z Visual Studio -> Nowy projekt, więc nie będziesz musiał się martwić o nic innego niż nauczenie się określonych technik Katana. W tej chwili Katana nie jest wystarczająco dojrzała, aby całkowicie zastąpić potrzebę IIS dla ASP.NET MVC, ale być może w przyszłości tak się stanie.

Kiedy więc będę musiał napisać własną implementację OWIN?

Odpowiedź: Załóżmy na przykład, że opracowałeś aplikację Windows, która powinna działać jako serwer w tle i słuchać numeru portu XXXX. Twój serwer będzie odpowiadał tylko na niektóre zestawy takich zapytań:

  1. POBIERZ Zapasy
  2. USUŃ ID magazynu = 4
  3. Identyfikator inwentarza PUT = 5

To wszystko. I nic więcej. Dlaczego więc potrzebujesz pełnego serwera IIS do tego małego zadania? W takim przypadku możesz utworzyć własną implementację OWIN. (Być może użyjesz do tego Katany)

Ok, więc zrozumiałem, że jeśli chcę stworzyć stronę ASP.NET MVC, nie mam możliwości zastąpienia IIS, to dlaczego powinienem w tej chwili wiedzieć o Katanie?

Odpowiedź: Chociaż Katana nie jest wystarczająco dojrzała, aby zastąpić potrzebę usług IIS, aby można było hostować witrynę ASP.NET MVC bezpośrednio na platformie Katana, ale Katana zaimplementowała wiele ciekawych interfejsów OWIN, dzięki czemu można korzystać z tych funkcji po stronie przy boku. Na przykład zezwolenie użytkownikom na logowanie się za pomocą Facebooka, Google, Twittera itp. Nie było wcześniej łatwe. Katana oferuje wiele haczyków (jako oprogramowanie pośrednie), dzięki czemu Katana może łatwo zająć się zewnętrznym uwierzytelnianiem opartym na mediach społecznościowych bez pisania kodu hydraulicznego. Istnieje wiele innych korzyści z używania Katany, które możesz dowiedzieć się, kiedy zaczniesz korzystać z tej technologii.

Emran Hussain
źródło
1
Nie powiedziałbym, że OWIN jest interfejsem, powiedzmy, jest standardem, protokołem, który ustandaryzuje sposób, w jaki aplikacja komunikuje się z hostem. Ważne jest jednak sprecyzowanie, że Katana jest tylko implementacją tego standardu opracowanego i utrzymywanego przez Microsoft. Inne implementacje są wymienione tutaj: github.com/owin/owin/wiki/Implementations
Stéphane
1
trochę mylące, gdy mówisz, że specyfikacja pojazdu to „4 koła”, a potem ktoś robi pojazd z 18 kołami… nie pasuje do specyfikacji, a więc…? czy coś mi brakuje. W każdym razie dobra analogia. Łatwiej to zrozumieć
kurasa
1
@Stephane: Cóż, to może nie być tylko interfejs, starałem się dać pomysł na wysokim poziomie, aby ktoś mógł zrozumieć związek między OWIN i KATANA bez przytłoczenia mnóstwem technicznych żargonów.
Emran Hussain
1
„Chociaż Katana nie jest wystarczająco dojrzała, aby zastąpić potrzebę usług IIS, aby można było hostować witrynę ASP.NET MVC bezpośrednio na platformie Katana”, wydaje się wskazywać, że usługi IIS nie są ważne, gdy Katana ma wersję 1.0. Nie, nie, to nieprawda. Microsoft ma Microsoft.Owin.Host.IIS, który pozwala na hostowanie aplikacji internetowych i Katany bezpośrednio w IIS (oczywiście bez System.Web). Usługi IIS są nadal kluczowym składnikiem aplikacji ASP.NET na platformie Microsoft.
Lex Li
2
Byłoby wspaniale, gdybyś mógł mi pomóc w zrozumieniu -what is lightweight part, i mean if Katana is compared to IIS, by which means it is lightweight ( say it does not do step#1,2,3 etc.. , but IIS does that.
Arindam Nayak
47

Prostszą wersją tej odpowiedzi jest to, że Katana ma zamiar w pełni zastąpić zestaw System.Web i stary potok ASP.NET, co daje zarówno lepszą elastyczność (użyj go w większej liczbie scenariuszy i używaj tylko części, które lubisz) i wydajności.

Dlatego wszyscy powinni teraz obserwować jego ewolucję i być gotowi na zmianę, gdy zostanie w końcu ukończona.

Poniżej znajduje się schemat, który narysowałem, aby uzupełnić szczegóły, których Microsoft nie zawiera w tym artykule .

wprowadź opis zdjęcia tutaj

OWIN jest takim standardem, że pozwala na uruchamianie na nim struktur aplikacji i zapominanie o wszystkim pod nim. Z drugiej strony sam OWIN wykorzystuje różne adaptery hosta, aby mieć pewność, że może komunikować się z bazowymi serwerami internetowymi (IIS i wieloma innymi).

Pracuję teraz z autorem serwera WWW Jexus, aby zbadać, w jaki sposób możemy napisać adapter hosta, aby połączyć OWIN / Katana i Jexusa. Z przyjemnością dowiadujemy się, że OWIN jest elastyczny i wysoce konfigurowalny.

Odniesienie: http://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/

Lex Li
źródło
Więc w tej odpowiedzi mówisz, że „Katana ma zamiar całkowicie zastąpić zestaw System.Web i stary potok ASP.NET”. Czy to oznacza, że ​​może zastąpić wszystkie Adaptery serwera na powyższym diagramie, a może po prostu host.systemweb?
netfed
@netfed niestety robi to sam OWIN i teraz przejmuje ASP.NET Core. To pytanie i odpowiedzi są nieaktualne.
Lex Li
Aha!! Czyli rdzeń Asp.net ma możliwości Owin? Czy rdzeń Asp.net działa jako zbiór modułów, w którym możesz zaimplementować tylko te moduły, których potrzebujesz, bez konieczności korzystania z większej kolekcji funkcji wbudowanych w System.web?
netfed
2
@netfed, OWIN umiera (moja klawiatura mobilna zmieniła moje słowa). Program ASP.NET Core zachowuje podejście oparte na oprogramowaniu pośrednim, a jego komponenty można montować w dowolny sposób i nie więcej System.Web.
Lex Li
To wszystko kończy :-) Dziękuję za wyjaśnienie.
netfed
15

Dlaczego powinienem używać OWIN, podczas gdy mogę korzystać z IIS?

OWIN został zaprojektowany do oddzielania serwerów internetowych od środowisk, w których pracujesz. Może sprawić, że aplikacje będą lekkie i przenośne dla środowisk miksujących i serwerów.

Katana to implementacja składników OWIN przez Microsoft.

Od kilku lat Microsoft ulepsza narzędzia internetowe i reaguje na nie w miarę postępów w realizacji planu. Na przykład rozwój ASP.Net MVC i ASP.Net Web API. Nie zależą od biblioteki DLL System.Web, co jest ogromnym obciążeniem, które teraz odczuwam. Zaletą jest to, że poprawki rozwojowe mogą być dostarczane na czas, a cykl jest szybszy niż kiedykolwiek. Również teraz programiści mogą wdrażać te aplikacje na niestandardowych hostach OWIN lub Katanie, co stanowi odniesienie do implementacji OWIN.

Jaki jest w końcu sens?

Microsoft wydał projekt, który jest lekkim hostem opartym na OWIN na szczycie IIS, o nazwie `Helios. Celem jest uniknięcie relacji ASP.NET/IIS poprzez zapewnienie niezależnych małych komponentów, których można używać, instalować i zarządzać niezależnie, działających na hoście internetowym, który implementuje specyfikacje OWIN.

Jednym z głównych powodów jest współczynnik wydajności. Helios będzie w stanie osiągnąć przepustowość 2x-3x większą niż standardowa aplikacja ASP.Net. Pod względem zużycia pamięci Helios jest znacznie lepszy niż System.Web dll. W przyjętym benchmarku architektura Helios pozwoliła przykładowej aplikacji na osiągnięcie 50000 równoczesnych żądań przy mniejszym narzutu o około 1 GB w porównaniu ze standardową aplikacją ASP.Net.

nznoor
źródło
1
Ten post może okazać się pomocny. simple-talk.com/dotnet/.net-framework/…
nznoor
0

OWIN to abstrakcja między aplikacją internetową a platformą hostingową. Jeśli piszesz aplikację internetową za pomocą OWIN, nie jesteś związany z IIS, możesz użyć innego hosta, jeśli chcesz.

Pytałeś, dlaczego warto korzystać z OWIN zamiast IIS, ale nie są to alternatywy dla siebie. OWIN znajduje się między usługami IIS a aplikacją, dzięki czemu możesz je wyłączyć bez konieczności ponownego pisania aplikacji.

Możesz także sprawdzić tę stronę https://github.com/Bikeman868/OwinFramework/wiki/OWIN

bikeman868
źródło