Wann sollte ich OWIN Katana verwenden?

270

Ich bin neu bei OWIN und Katana. Ich verstehe wirklich nicht, warum ich OWIN verwenden sollte, solange ich es verwenden kann IIS. Zur Vereinfachung lautet meine Frage: Was verliere ich, wenn ich das Lernen von OWIN überspringe und IIS für meine Websites verwende?

Ich habe gegoogelt, aber es gibt keine einfache Erklärung. Es gibt einige Informationen hier , aber sie verwenden einige Jargonphrasen, so dass ich sie nicht verstehen kann.

Seyed Morteza Mousavi
quelle
2
Ich frage mich, wie stark die OWIN-Richtung vom IoT beeinflusst wird. Wir können IIS nicht wirklich auf ein Arduino kleben, oder?
Sentinel

Antworten:

279

In asp.net WebApi v2 wird die OWIN-Pipeline zum Standard. Es wird schließlich die Standard-Pipeline unter jedem asp.net-Projekt sein.

Ich kann es nicht besser ausdrücken als das, was hier geschrieben steht: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

Der Abschnitt "Das offene Webinterface für .NET (OWIN)" erläutert die Ziele von OWIN perfekt.

Ohne OWIN sind die asp.net-Bits an die Art und Weise gekoppelt, wie IIS mit der Anwendung kommuniziert. OWIN abstrahiert Webserver und Framework-Komponenten. Das bedeutet, dass Ihr Anwendungscode jetzt die OWIN-Schnittstelle kennt, nicht jedoch den Webserver, der die Anforderung bedient.

Im Gegenzug können Anwendungen einfacher zwischen Hosts und möglicherweise ganzen Plattformen / Betriebssystemen portiert werden. Zum Beispiel ermöglicht die Möglichkeit, eine Anwendung in einer Konsole oder einem beliebigen Prozess zu hosten, Mono, sie ohne Aufwand zu hosten ... (Raspberry Pi jedermann)

Der zweite Aspekt ist, dass es als Pipeline funktioniert.


Owin Pipeline


Sie können alle Middlewares (und so viele wie Sie möchten) zwischen dem Webserver und Ihrer Anwendung anschließen.
Dies ermöglicht modularere Lösungen. Sie können weiterverteilbare Middlewares entwickeln, die sich auf die Anforderung / Antwort auswirken können, die zu / von Ihrer Anwendung kommt. Halten Sie diese Module jedoch vom Anwendungscode getrennt.

Um sich von den Vorteilen dieses modularen Ansatzes zu überzeugen, werfen Sie einen Blick auf die für OWIN verfügbaren Nuget-Pakete: http://www.nuget.org/packages?q=owin

Viele dieser Pakete waren zuvor Kernfunktionen von asp.net und wurden als Middleware extrahiert.
Das Hinzufügen von Unterstützung zur Anmeldung mit verschiedenen OAuth-Anbietern wird beispielsweise zu einem Infrastrukturproblem (einer Middleware) und muss nicht mehr Teil Ihres Anwendungscodes sein:

Oder wenn Sie automatisch alle Bilder Ihrer Website durch niedliche Katzenbilder ersetzen möchten, können Sie dies auch transparent tun:

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

EDIT: Es ist jetzt als Nuget-Paket erhältlich: Owin.Catify !

Stéphane
quelle
Ihre Antwort ist sicherlich gut, da sie positiv bewertet wurde, aber es fällt mir schwer, sie herauszufinden.
Seyed Morteza Mousavi
5
Wie kann ich es besser machen? Was verstehst du nicht?
Stéphane
1
Obwohl OWIN Vorteile bietet, scheint es schwierig zu sein, Fehler zu beheben, da der Ausführungsfluss effektiv von Middleware zu Middleware "springt". Jeder ändert möglicherweise die Reaktion auf dem Weg. Der Attach-Debugger von Visual Studio scheint nicht in der Lage zu sein, dem Ablauf zu folgen. Und wenn eine Ausnahme auftritt (in einer Webanwendung), erhalten Sie nur eine leere Seite mit 200 OK-Antworten. Kein Fehler außer dem Windows-Ereignisprotokoll.
Simbolo
7
Ich fand die Erklärung unter weblogs.asp.net/pglavich/owin-katana-and-getting-started nützlich. Auf diese Weise können Sie Ihre Anwendung von IIS und der Abhängigkeit von der System.Web-Assembly entkoppeln. Reduzieren Sie die Anzahl der Komponenten in der HTTP-Pipeline, um die App leichter zu halten.
Terence
2
Ich muss hinzufügen, dass in meiner aktuellen Umgebung einige Teams WebApi und andere Nancy verwenden. Da beide auf OWIN sitzen, können wir Middlewares wie Api Key Handling oder Stateless Authentication unabhängig vom Framework gemeinsam nutzen. Wir lassen das Team auswählen, was am besten zu ihnen passt. Das ist der wahre Vorteil von 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
      } 
   }
}

Ja, das ist richtig. OWIN ist eine Schnittstelle und Katana ist eine Implementierung der OWIN-Schnittstelle von Microsoft . Daher hören wir diese beiden Wörter (OWIN / KATANA) zusammen und oft verwechseln wir den Unterschied zwischen diesen beiden Begriffen. Katana ist also die Implementierung der OWIN-Schnittstelle durch Microsoft. Angenommen, es gibt eine andere Firma namens BIG-BOSS, die eine eigene Implementierung von OWIN erstellen wollte. Sie können dies tun und ihre Implementierung als "BATANA" bezeichnen und Phrasen wie OWIN / BATANA bewerben.

Also, warum OWIN !!!

Denken Sie an ein Land, in dem das einzige Fahrzeug, das zur Bewegung zur Verfügung steht, ein LKW ist. Nichts anderes. Wenn Sie ein Fahrzeug kaufen möchten, würden Sie LKW kaufen. Früher war das gut, aber die Leute begannen zu begreifen, dass sie nicht immer einen Lastwagen brauchen, besonders wenn sie einen Film sehen oder Milch kaufen wollen. Das Fahren eines schweren Lastwagens kostet nicht nur viel Kraftstoff, sondern auch Stress beim Fahren hinzufügen. Aber ja, wenn sie viele schwere Sachen tragen wollen, erfüllt der LKW den Zweck sehr gut.

Dann hat die Regierung dieses Landes eine Spezifikation für Fahrzeughersteller ausgearbeitet. Die Spezifikation ist wie folgt:

  1. Ein Fahrzeug muss 4 Räder haben
  2. Ein Fahrzeug muss eine Lenkung haben.
  3. Ein Fahrzeug muss Scheinwerfer und Signalleuchten haben.

Basierend auf diesen Spezifikationen kann jeder ein Fahrzeug nach unterschiedlichen Anforderungen herstellen und sein Fahrzeug entsprechend benennen. Daher tauchten Limousine, Pickup, SUV, VAN usw. auf dem Markt auf. Wenn jemand nicht die ganze Zeit schwere Sachen tragen muss, sondern nur ein Fahrzeug braucht, um zum Arbeitsplatz zu gehen, kann er / sie eine kleine Limousine kaufen. Jemand kann SUV kaufen, wenn er wenig mehr Leistung benötigt.

Anhand des obigen Beispiels können wir sagen, dass unsere ASP.NET-Webanwendung System.Web Assembly verwendet, das stark ausgelastet ist (wie ein LKW), und wenn wir eine kleine Webanwendung erstellen möchten, bei der unser Zweck nur darin besteht, einige Dateien basierend bereitzustellen Bei einigen Anfragen müssen wir diese schwere System.Web-Baugruppe (LKW) verwenden. Jetzt taucht OWIN auf. OWIN ist eine Reihe von Spezifikationen (wir können sie als Schnittstelle bezeichnen), die einen Server definieren. Basierend auf dieser Spezifikation kann jemand (wie ein Fahrzeughersteller) verschiedene Arten von Servern basierend auf bestimmten Problemdomänen / Anwendungsanforderungen herstellen. Microsoft hat auf die gleiche Weise eine eigene Implementierung für OWIN mit dem Namen Katana erstellt, die die Web-API bedienen kann. Da WebAPI eine leichte Technologie ist, die keine vollständigen System.Web-Dinge benötigt,

Wenn Sie jetzt fragen: „ Brauche ich es?'? Die Antwort lautet: "Es hängt von Ihrem Leistungsbedarf ab." Wenn es Ihnen nichts ausmacht, mit Ihrem LKW zu fahren, auch wenn Sie sich einen Film ansehen, brauchen Sie OWIN vielleicht nicht. Aber wenn Sie das Gefühl haben, ist ein leichtes Limousinenauto alles, was Sie brauchen, um in einer Stadt, in geringer Entfernung, im Film usw. zu fahren. Ja, Sie können überprüfen, welche Implementierungen von OWIN auf dem Markt erhältlich sind. Katana ist eine der Implementierungen von OWIN, daher können Sie überprüfen, was Katana bietet. Nicht nur Katana, wenn ein anderes Unternehmen OWIN gemäß einer bestimmten Domäne implementiert (z. B. ein Server für Medizinprodukte, auf dem die neuesten Arzneimittelinformationen heruntergeladen werden), und wenn Sie Arzt sind, können Sie möglicherweise die Implementierung von OWIN überprüfen. Darüber hinaus können Sie selbst eine eigene Implementierung von OWIN erstellen, die auf eine bestimmte Nische ausgerichtet ist.

In Bezug auf Webanwendungen müssen Sie sich als einfacher Webentwickler, der benutzerdefinierte Websites für Ihre Kunden entwickelt, möglicherweise nicht um die benutzerdefinierte Implementierung von OWINs kümmern, da IIS Sie in ausgewogener Weise bedient. Wenn Sie ein Web-API-Projekt erstellen, erhalten Sie eine Katana-basierte Vorlage aus Visual Studio -> Neues Projekt, sodass Sie sich nur um das Erlernen von Katana-spezifischen Techniken kümmern müssen. Derzeit ist Katana nicht ausgereift genug, um die Notwendigkeit von IIS für ASP.NET MVC vollständig zu ersetzen, aber möglicherweise wird dies in Zukunft der Fall sein.

Wann muss ich dann möglicherweise meine eigene OWIN-Implementierung schreiben?

Antwort: Angenommen, Sie haben eine Windows-Anwendung entwickelt, die als Server im Hintergrund ausgeführt werden und eine Portnummer XXXX abhören soll. Ihr Server antwortet nur auf einige der folgenden Anfragen:

  1. Inventar abrufen
  2. DELETE Inventory ID = 4
  3. PUT Inventory ID = 5

Das ist alles. Und sonst nichts. Warum benötigen Sie für diese kleine Aufgabe einen vollständigen IIS-Webserver? In diesem Fall können Sie Ihre eigene OWIN-Implementierung erstellen. (Vielleicht benutzt du dafür Katana)

Ok, ich habe verstanden, dass ich, wenn ich eine ASP.NET MVC-Website erstellen möchte, nicht die Möglichkeit habe, IIS zu ersetzen. Warum sollte ich dann in diesem Moment etwas über Katana wissen müssen?

Antwort: Auch wenn Katana nicht ausgereift genug ist, um die Notwendigkeit von IIS zu ersetzen, sodass Sie Ihre ASP.NET MVC-Website direkt auf Katana hosten können, hat Katana viele coole Schnittstellen von OWIN implementiert, damit Sie die Vorteile dieser Funktionsseite nutzen können nebeneinander. Zum Beispiel war es vorher nicht sehr einfach, Ihren Benutzern die Anmeldung über Facebook, Google, Twitter usw. zu ermöglichen. Katana bietet Ihnen viele Hooks (als Middleware), sodass Sie Katana die externe Authentifizierung auf Social Media-Basis problemlos durchführen lassen können, ohne Installationscode schreiben zu müssen. Die Verwendung von Katana bietet viele weitere Vorteile, die Sie möglicherweise feststellen, wenn Sie diese Technologie einsetzen.

Emran Hussain
quelle
1
Ich würde nicht sagen, dass OWIN per se eine Schnittstelle ist, es ist ein Standard, ein Protokoll, um die Art und Weise zu standardisieren, wie eine Anwendung mit dem Host kommuniziert. Es ist jedoch wichtig zu präzisieren, dass Katana nur eine Implementierung dieses von Microsoft entwickelten und gepflegten Standards ist. Andere Implementierungen sind hier aufgelistet: github.com/owin/owin/wiki/Implementations
Stéphane
1
etwas verwirrend, wenn Sie sagen, dass die Spezifikation für ein Fahrzeug "4 Räder" ist und dann jemand ein 18-Rad-Fahrzeug herstellt ... passt nicht zur Spezifikation, oder? oder fehlt mir etwas Gute Analogie trotzdem. Erleichtert das Verständnis
Kurasa
1
@Stephane: Nun, es ist vielleicht nicht nur eine Schnittstelle, ich habe versucht, eine Idee auf hoher Ebene zu geben, damit jemand die Beziehung zwischen OWIN und KATANA verstehen kann, ohne von vielen technischen Jargons überwältigt zu werden.
Emran Hussain
1
"Auch wenn Katana nicht ausgereift genug ist, um die Notwendigkeit von IIS zu ersetzen, sodass Sie Ihre ASP.NET MVC-Website direkt auf Katana hosten können", scheint dies darauf hinzudeuten, dass IIS nach Katana 1.0 nicht mehr wichtig ist. Nein, nein, das stimmt nicht. Microsoft bietet Microsoft.Owin.Host.IIS an, mit dem Web-Apps + Katana direkt auf IIS gehostet werden können (natürlich ohne System.Web). IIS ist weiterhin eine Schlüsselkomponente für ASP.NET-Anwendungen auf der Microsoft-Plattform.
Lex Li
2
Es wäre großartig, wenn Sie mir beim Verständnis helfen 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.
könnten
47

Eine einfachere Version dieser Antwort ist, dass Katana die System.Web-Assembly und die alte ASP.NET-Pipeline vollständig ersetzen wird, was Ihnen sowohl eine bessere Flexibilität (verwenden Sie sie in mehr Szenarien und verwenden Sie nur die Teile, die Sie mögen) als auch Leistung bietet.

Daher sollte jeder jetzt seine Entwicklung beobachten und bereit sein, zu wechseln, wenn es endlich abgeschlossen ist.

Unten sehen Sie ein Diagramm, das ich gezeichnet habe, um die Details zu ergänzen, die Microsoft in diesem Artikel nicht berücksichtigt .

Geben Sie hier die Bildbeschreibung ein

OWIN ist ein solcher Standard, dass Anwendungsframeworks darauf ausgeführt werden und alles darunter vergessen wird. Andererseits verwendet OWIN selbst verschiedene Hostadapter, um sicherzustellen, dass es mit den zugrunde liegenden Webservern (IIS und vielen anderen) kommunizieren kann.

Ich arbeite jetzt mit dem Autor des Jexus-Webservers zusammen, um zu untersuchen, wie wir einen Hostadapter schreiben können, um OWIN / Katana und Jexus zu verbinden. Wir freuen uns sehr, dass OWIN flexibel und hochgradig anpassbar ist.

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

Lex Li
quelle
In dieser Antwort sagen Sie also, dass "Katana die System.Web-Assembly und die alte ASP.NET-Pipeline vollständig ersetzen soll". Bedeutet das, dass alle Serveradapter in Ihrem obigen Diagramm oder nur host.systemweb ersetzt werden können?
Netfed
@netfed leider tut OWIN selbst und jetzt übernimmt ASP.NET Core. Diese Frage und die Antworten sind alle veraltet.
Lex Li
Aha!! Der Asp.net-Kern verfügt also über Owin-Kapazitäten? Oder arbeitet der Asp.net-Kern als eine Sammlung von Modulen, in denen Sie nur die Module implementieren können, die Sie benötigen, und keine größere Sammlung von Funktionen verwenden müssen, die in System.web integriert sind?
netfed
2
@netfed, OWIN stirbt (meine mobile Tastatur hat meine Worte geändert). ASP.NET Core behält jedoch den Middleware-Ansatz bei, und Sie können seine Komponenten nach Ihren Wünschen zusammenstellen, und nicht mehr System.Web.
Lex Li
Damit ist alles abgeschlossen :-) Vielen Dank für die Klarstellung.
netfed
15

Warum sollte ich OWIN verwenden, während ich IIS verwenden kann?

OWIN wurde entwickelt, um Webserver von den Frameworks zu entkoppeln, unter denen Sie arbeiten. Es kann die Anwendungen leicht und portabel für die Mixing-Frameworks und Server machen.

Und Katana ist die Implementierung von OWIN-Komponenten durch Microsoft.

Seit einigen Jahren macht Microsoft Web-Tools agiler und reaktionsschneller, während der Plan voranschreitet. Zum Beispiel die Entwicklung von ASP.Net MVC und ASP.Net Web API. Sie hängen nicht von System.Web dll ab, was eine große Belastung ist, die sie jetzt fühlen, denke ich. Vorteil ist, dass beide Entwicklungen zeitnah behoben werden können und der Zyklus schneller als je zuvor ist. Entwickler können diese Anwendungen jetzt auch auf benutzerdefinierten OWIN-Hosts oder auf Katana bereitstellen, was eine Referenz für die OWIN-Implementierung ist.

Was ist der Sinn schließlich?

Microsoft hat ein Projekt namens "Helios" veröffentlicht, bei dem es sich um einen leichtgewichtigen OWIN-basierten Webhost auf IIS handelt. Ziel ist es, die ASP.NET / IIS-Beziehung zu vermeiden, indem einige unabhängige kleine Komponenten bereitgestellt werden, die unabhängig voneinander auf einem Webhost verwendet, installiert und verwaltet werden können, der die OWIN-Spezifikationen implementiert.

Einer der Hauptgründe ist der Leistungsfaktor. Helios kann einen 2x-3x höheren Durchsatz als die Standard-ASP.Net-Anwendung erzielen. In Bezug auf den Speicherverbrauch ist Helios viel besser als die System.Web-DLL. In einem Benchmark ermöglichte die Helios-Architektur einer Beispielanwendung, 50000 gleichzeitige Anforderungen mit ungefähr 1 GB weniger Overhead im Vergleich zu einer Standard-ASP.Net-Anwendung zu erreichen.

nznoor
quelle
1
Möglicherweise finden Sie diesen Beitrag hilfreich. simple-talk.com/dotnet/.net-framework/…
nznoor
0

OWIN ist eine Abstraktion zwischen der Webanwendung und der Hosting-Plattform. Wenn Sie Ihre Webanwendung mit OWIN schreiben, sind Sie nicht an IIS gebunden. Sie können auch einen anderen Host verwenden, wenn Sie möchten.

Sie haben gefragt, warum Sie OWIN anstelle von IIS verwenden, aber dies sind keine Alternativen zueinander. OWIN befindet sich zwischen IIS und Ihrer Anwendung, sodass Sie IIS ausschalten können, ohne Ihre Anwendung neu schreiben zu müssen.

Vielleicht möchten Sie auch diese Seite https://github.com/Bikeman868/OwinFramework/wiki/OWIN besuchen

bikeman868
quelle