Jak wyjaśnić Katana i OWIN prostymi słowami i użytkami?

337

Czytałem wiele artykułów o projektach OWIN i Katana, ale nie mogłem uzyskać pełnego obrazu tego.

Dla zwykłego programisty korzystającego z ASP.NET:

  1. Czym dokładnie jest OWIN i jakie problemy rozwiązuje (w prostych słowach). Jaki jest jej związek z IIS?
  2. Czy OWIN zastępuje IIS? jeśli nie, w jakich sytuacjach OWIN najlepiej pasuje?
  3. W jaki sposób OWIN może mi pomóc w codziennych projektach pracy?
  4. W jaki sposób OWIN może mi pomóc w projektach samodoskonalenia?
ebram khalil
źródło
Możesz rozważyć zmianę zaakceptowanej odpowiedzi, biorąc pod uwagę, że kilka punktorów nie jest naprawdę poprawnych - są mylące.
Admir Tuzović
3
Moja książka na ASP.net sugeruje implementację Tożsamości i klasy UserManager przez OWIN i naprawdę nie widzę sensu. Zdezorientowało mnie to zupełnie ...
Łukasz

Odpowiedzi:

409

W odniesieniu do powyższego komentarza OWIN nie jest ramą. OWIN to specyfikacja dotycząca sposobu budowania serwerów i aplikacji internetowych w celu ich rozdzielenia i umożliwienia przenoszenia aplikacji ASP.NET do środowisk, które nie były wcześniej obsługiwane.

Przed budowaniem aplikacji ASP.NET przed OWIN byłeś z natury związany z usługami IIS z powodu dużej zależności od System.Webasemblera.

System.Web to coś, co istnieje od czasu ASP (wersja inna niż .NET) i wewnętrznie zawiera wiele rzeczy, których możesz nawet nie potrzebować (takich jak formularze sieciowe lub autoryzacja adresów URL), które domyślnie działają na każde żądanie, zużywając zasoby i tworząc ASP Aplikacje .NET są generalnie wolniejsze niż ich odpowiedniki, takie jak na przykład Node.js.

Sam OWIN nie ma żadnych narzędzi, bibliotek ani niczego innego. To tylko specyfikacja.

Z drugiej strony Katana jest w pełni rozwiniętym frameworkiem stworzonym do utworzenia pomostu między obecnymi frameworkami ASP.NET a specyfikacją OWIN. W tej chwili Katana z powodzeniem dostosowała następujące frameworki ASP.NET do OWIN:

  • Web API
  • Sygnał R

ASP.NET MVC i formularze sieciowe nadal działają wyłącznie za pośrednictwem System.Web, a na dłuższą metę planuje się ich również oddzielić.

Z drugiej strony IIS jest dobrym, zaradnym hostem dla serwerów WWW. Całe problemy z wydajnością ASP.NET przy użyciu IIS mają głębokie korzenie System.Web. Do niedawna decydując o tym, jak będziesz hostować swój serwer WWW, dysponowałeś dwiema opcjami:

  • IIS
  • Self-Host

Więc jeśli chciałbyś występu, wybrałbyś opcję samodzielnego hostowania. Jeśli chciałbyś mieć wiele gotowych funkcji, które zapewnia IIS, wybrałbyś IIS, ale straciłbyś na wydajności.

Teraz jest trzecia opcja, biblioteka Microsoft o nazwie Helios (obecna nazwa kodowa), która zamierza usunąć System.Webz drogi i umożliwić korzystanie z IIS w bardziej „czystszy” sposób, bez zbędnych bibliotek lub modułów. Helios jest teraz w wersji wstępnej i czeka na dodatkowe opinie społeczności, aby w pełni obsługiwać produkt Microsoft.

Mam nadzieję, że to wyjaśnienie wyjaśni ci lepiej.

EDYCJA (wrz 2014):

Ponieważ ASP.NET vNext jest w fazie rozwoju, Katana powoli przechodzi na emeryturę. Wersja 3.0 najprawdopodobniej będzie ostatnią dużą wersją Katany jako samodzielnej platformy.

Jednak wszystkie koncepcje wprowadzone z Kataną są zintegrowane z ASP.NET vNext, co oznacza, że ​​model programowania będzie prawie taki sam. Cytat z postu na forum autorstwa Davida Fowlera (architekta ASP.NET vNext):

vNext jest następcą Katany (dlatego wyglądają tak podobnie). Katana była początkiem odejścia od System.Web i bardziej modułowych komponentów do stosu WWW. Możesz zobaczyć vNext jako kontynuację tej pracy, ale idącą znacznie dalej (nowy CLR, nowy system projektu, nowe abstrakty http).

Wszystko, co istnieje dzisiaj w Katanie, przejdzie do vNext.

EDYCJA (luty 2015):

ASP.NET vNext jest teraz znany jako ASP.NET 5 i zostanie zbudowany na platformie .NET Core 5. .NET Core 5 to lekka faktorowa wersja .NET Framework, zaprojektowana do obsługi celów ASP.NET 5 i .NET Native . Jednak ASP.NET 5 będzie również obsługiwany przez .NET Framework 4.6, który powinien być dostępny wraz z .NET Core 5. Zarówno ASP.NET 5, jak i .NET Core 5 będą licencjonowane na MIT i będą przyjmować wkłady społeczności.

EDYCJA (maj 2015):

Dodatkowo marka ASP.NET Web API zostanie wycofana, jednak jej technologia będzie bazowa dla nowego ASP.NET MVC 6. Poprzednie wersje ASP.NET MVC były budowane przez wdrożenie IHttpHandler, interfejsu zdefiniowanego w System.Web. Program ASP.NET MVC 6 usuwa tę zależność, dzięki czemu jest przenośny na różne platformy i serwery sieciowe.

EDYCJA (maj 2016):

Nazwa ASP.NET 5 zostanie oficjalnie zmieniona na ASP.NET Core, począwszy od wersji Candidate 2, która ma zostać wkrótce wydana. To samo dotyczy Entity Framework 7, którego nazwa zostanie zmieniona na Entity Framework Core. Więcej informacji o oficjalnym ogłoszeniu i jego przyczynach można znaleźć na blogu Scotta Hanselmana: ASP.NET 5 nie żyje - Przedstawiamy ASP.NET Core 1.0 i .NET Core 1.0

EDYCJA (maj 2016):

Wraz z wydaniem Release Candidate 2 program ASP.NET Core został zmodyfikowany, tak aby przyszłe aplikacje internetowe były w rzeczywistości konfiguracją aplikacji konsolowych .NET Core do przetwarzania przychodzących żądań HTTP . Ta koncepcja sprawia, że ​​program ASP.NET Core jest jeszcze bardziej dostosowany do podejścia przyjętego przez Microsoft przy obsłudze architektury mikrousług i jej implementacji za pośrednictwem usługi Azure Service Fabric. Więcej informacji na ten temat można znaleźć na oficjalnym blogu: Ogłoszenie ASP.NET Core RC2

Admir Tuzović
źródło
2
@ebramtharwat Teraz rok później nie wygląda na to, że helios jest rzeczą
Andrew Savinykh
1
Wspomniałeś, że Katana v3 najprawdopodobniej będzie ostatnią ważną wersją, więc posuwając się naprzód, jakie ramy zostaną zastosowane w celu zastąpienia Katany?
Vincent
2
Funkcje Katana zostały zintegrowane z ASP.NET 5. Katana będzie nadal istnieć dla kompatybilności wstecznej.
Admir Tuzović,
2
@ AdmirTuzović: świetna odpowiedź. Wszelkie dodatkowe aktualizacje do dodania od maja 2016 r.?
Igby Largeman,
2
Pierwsza odpowiedź z kolejnymi edycjami bardzo dobrze wyjaśnia przejścia. Dzięki za wysiłek.
Śpiewał Suantak
71

Gdybym musiał zdefiniować OWIN dla siebie, byłoby to: „Najlepsze pomysły ze społeczności deweloperów Ruby i Node.js, dostępne w .NET”

Ale to nie pomogłoby żadnemu deweloperowi ASP.NET. Moja własna definicja byłaby czymś w rodzaju:

OWIN definiuje standardowy interfejs między serwerami WWW .NET a aplikacjami internetowymi. Interfejs OWIN ma na celu rozłączenie serwera i aplikacji. Jeśli muszę odpowiedzieć na postawione pytania, oto:

  1. OWIN to specyfikacja interfejsu. Oddziela aplikacje internetowe od IIS.

  2. Jeśli używasz gotowych komponentów (czyli Katana), to niektóre części funkcjonalności aplikacji są znacznie łatwiejsze do wdrożenia w porównaniu do starego ASP.NET. Uwierzytelnianie za pomocą zewnętrznych dostawców tożsamości (Facebook, Twitter) jest tego przykładem.

  3. OWIN to przede wszystkim zbiór najlepszych praktyk, które zostały sprawdzone w społecznościach tworzących strony internetowe. Pokazuje sposób wdrażania aplikacji internetowych, które są bardzo otwarte na możliwość rozszerzenia. Ponieważ każdy programista powinien stale być w czołówce nowych technologii, jest to jeden ze sposobów, aby być na bieżąco z całą społecznością programistów, a nie tylko .NET. Jeśli nauczysz się OWIN, o wiele łatwiej będzie nauczyć się innych platform programistycznych, takich jak Express for node.js lub Rack for Ruby, ponieważ stosowane przez nich praktyki są podobne.
Slavo
źródło
1
Ten artykuł może również pomóc w zorientowaniu się w historycznych problemach rozwiązanych przez OWIN / katana: asp.net/aspnet/overview/owin-and-katana/… . To powiedziawszy, tylko te frameworki są obecnie obsługiwane na hoście OWIN : owin.org/#projects . Jeśli Twoja aplikacja korzysta z dowolnej z tych struktur aplikacji, może być hostowana w OWIN.
Praburaj,
Czy możesz opublikować tutaj sekwencję przychodzących żądań z przeglądarki do momentu odpowiedzi renderowania w przeglądarce podczas korzystania z owinhost.exe. Nie mogłem znaleźć dokumentu na ten temat.
Saravanan
2
Punkty 1 i 2 wprowadzają w błąd, OWIN nie może samodzielnie niczego zastąpić. Podobnie jak w punkcie 4, jest to tylko specyfikacja, która w jakiś sposób wymaga implementacji, a referencyjnymi implementacjami firmy Microsoft są do tej pory Katana i Helios.
Mani Gandham
Najlepsze pomysły ze społeczności
deweloperów
1
Middleware. Oddzielenie aplikacji od środowiska hostingowego sprawia, że ​​można je podłączyć.
Slavo
59

Spróbuję objąć to z praktycznego punktu widzenia.

Katana to nazwa projektu do wdrożenia OWIN w Microsoft .

Czym dokładnie jest OWIN i jakie problemy rozwiązuje (w prostych słowach). Jaki jest jej związek z IIS? OWIN ( Open Web Interface for .NET ) jest standardem ( specyfikacja OWIN ), a Katana jest biblioteką .NET, możesz stąd pobrać nuget . OWIN i Katana stały się nieco synonimami w sieci.
Przed OWIN jedyną opcją był IISOWIN, możesz używać dowolnej innej aplikacji (która ma punkt wejścia) jako serwera WWW.

Czy OWIN zastępuje IIS? jeśli nie, w jakich sytuacjach OWIN najlepiej pasuje?
Nie, to nie zastępuje usług IIS, możesz użyć OWIN i usług IIS , Microsoft.Owin.Host.SystemWebktóre są do tego przeznaczone . Najlepiej pasuje, jeśli chcesz zoptymalizować / zmienić sposób, w jaki jest obsługiwany w usługach IIS, lub chcesz utworzyć niestandardowy serwer internetowy z, powiedzmy, aplikacji Windows Forms.

W jaki sposób OWIN może mi pomóc w codziennych projektach pracy?
Może to obniżyć koszty eksploatacji serwera, ponieważ serwery WWW nie muszą już działać w IIS (Windows) (serwery Windows są droższe niż serwery z Uniksem i można je uruchomić w aplikacji konsolowej pod Mono w Linuksie).

W jaki sposób OWIN może mi pomóc w projektach samodoskonalenia?
Nauka Microsoft.Owin(i inne powiązane biblioteki OWIN) poprawią twoją wiedzę na temat działania komunikacji HTTP między klientem a serwerem WWW.

Dobra lektura, jeśli chcesz dowiedzieć się więcej o tym, czym jest Katana i OWIN.

Matas Vaitkevicius
źródło
6
Dobra robota i dziękuję za bezpośrednie udzielenie odpowiedzi na zadane pytania, zamiast zjeżdżania w dół linii styczności.
Dav
Co jeśli zawsze używamy serwera obsługującego Microsoft IIS do hostingu? Wygląda na to, że OWIN jest domyślny w nowych szablonach WebApi2. Czy powinienem usunąć go jako odniesienie, jeśli planuję hostować tylko w IIS / zawsze?
TechTurtle
@TechTurtle Hi Tech, polecam opublikowanie go jako osobnego pytania.
Matas Vaitkevicius
Bardzo jasne wytłumaczenie. Dzięki za przydatne informacje
Uttam,
9

Co to jest OWIN?

OWIN to skrót od Open Web Interface for .NET. OWIN to specyfikacja opisująca, w jaki sposób środowiska programistyczne takie jak ASP.NET MVC powinny oddziaływać z serwerami WWW. Celem OWIN jest oddzielenie aplikacji internetowych od serwera poprzez wprowadzenie warstwy abstrakcji. Taka abstrakcja umożliwia uruchomienie tej samej aplikacji na wszystkich serwerach internetowych, które obsługują OWIN. Dodatkowo upraszcza cały system, ponieważ warstwa abstrakcji może zapewnić lekką infrastrukturę do hostowania aplikacji. IIS zapewnia bogaty zestaw funkcji dla aplikacji internetowych. Jednak aplikacje internetowe mogą nie potrzebować wszystkich tych funkcji. Może im wystarczyć minimalne możliwości przetwarzania HTTP. Host kompatybilny z OWIN może zapewnić takie środowisko hostingowe dla tych aplikacji. Co więcej, możesz zdefiniować potok modułów używanych podczas przetwarzania żądania. Potok OWIN to łańcuch kompatybilnych komponentów OWIN, przez który przechodzi żądanie.

Co to jest Katana?

Katana to zestaw komponentów firmy Microsoft zbudowany przy użyciu specyfikacji OWIN. Niektóre z tych komponentów to Web API, ASP.NET Identity i SignalR.

Powyżej znajduje się fragment artykułu CodeGuru: http://www.codeguru.com/csharp/.net/net_asp/overview-of-owin-and-katana.htm

Venkatesh Muniyandi
źródło