Quand dois-je utiliser OWIN Katana?

270

Je suis nouveau chez OWIN et Katana. Je ne comprends vraiment pas pourquoi je devrais utiliser OWIN, alors que je peux l'utiliser IIS. Pour simplifier, ma question est: qu'est-ce que je perds si je saute l'apprentissage OWIN et utilise IIS pour mes sites Web?

J'ai googlé mais il n'y a pas d'explication simple. Il y a des informations ici , mais ils utilisent des phrases de jargon donc je ne peux pas les comprendre.

Seyed Morteza Mousavi
la source
2
Je me demande à quel point la direction OWIN est influencée par l'IoT. Nous ne pouvons pas vraiment coller IIS sur un Arduino.
Sentinel

Réponses:

279

Dans asp.net WebApi v2, le pipeline OWIN devient la valeur par défaut. Il finira par être le pipeline standard de tout projet asp.net.

Je ne peux pas l'exprimer mieux que ce qui est écrit ici: http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana

La section "L'interface Web ouverte pour .NET (OWIN)" explique parfaitement les objectifs d'OWIN.

Sans OWIN, les bits asp.net sont couplés à la façon dont IIS communique avec l'application. OWIN résume les serveurs Web et les composants du framework. Cela signifie que votre code d'application connaîtra désormais l'interface OWIN, mais pas le serveur Web qui traite la demande.

En retour, les applications peuvent être plus facilement portées entre des hôtes et des plates-formes / systèmes d'exploitation potentiellement entiers. Par exemple, la possibilité d'héberger une application dans une console ou tout autre processus permet à Mono de l'héberger sans efforts ... (Raspberry Pi n'importe qui)

Le deuxième aspect est qu'il fonctionne comme un pipeline.


Pipeline Owin


Vous pouvez connecter tous les middlewares (et autant que vous le souhaitez) entre le serveur Web et votre application.
Cela permet des solutions plus modulaires. Vous pouvez développer des middlewares redistribuables qui peuvent avoir un impact sur la demande / réponse venant de / vers votre application, mais gardez ces modules séparés du code de l'application.

Pour vous convaincre des avantages de cette approche modulaire, jetez un œil aux packages nuget disponibles pour OWIN: http://www.nuget.org/packages?q=owin

Un grand nombre de ces packages étaient auparavant des fonctionnalités asp.net de base et ont été extraits en tant que middleware.
Par exemple, l'ajout de la prise en charge de la connexion à l'aide de divers fournisseurs OAuth devient une préoccupation d'infrastructure (un middleware) et n'a plus besoin de faire partie de votre code d'application:

Ou si vous souhaitez remplacer automatiquement toutes les images de votre site Web par des images de chats mignons, vous pouvez également le faire de manière transparente:

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

EDIT: Il est maintenant disponible sous forme de paquet de pépites : Owin.Catify !

Stéphane
la source
Votre réponse est sûrement bonne car elle a voté, mais c'est difficile pour moi de le comprendre.
Seyed Morteza Mousavi
5
Comment puis-je l'améliorer? Qu'est-ce que tu ne comprends pas?
Stéphane
1
Bien qu'OWIN ait des avantages, il semble difficile à déboguer car le flux d'exécution «sautera» effectivement du middleware au middleware. Chacun peut potentiellement changer la réponse en cours de route. Le débogueur d'attachement de Visual Studio ne semble pas être en mesure de suivre le flux. Et lorsqu'une exception se produit (sur une application Web), vous obtiendrez simplement une page vierge avec 200 réponses OK. Aucune erreur ailleurs que dans le journal des événements Windows.
simbolo
7
J'ai trouvé l'explication sur weblogs.asp.net/pglavich/owin-katana-and-getting-started utile. C'est un moyen de découpler votre application d'IIS et la dépendance à l'assembly System.Web. Réduire la quantité de composants qui sont dans le pipeline HTTP, gardant ainsi l'application légère.
Terence
2
Je dois ajouter que dans mon environnement actuel, certaines équipes utilisent WebApi et d'autres utilisent Nancy. Étant donné que les deux sont placés au-dessus d'OWIN, nous pouvons partager des middlewares tels que la gestion des clés Api ou l'authentification sans état, indépendamment du cadre. Nous laissons l'équipe choisir celle qui lui convient le mieux. C'est le véritable avantage d'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
      } 
   }
}

Oui c'est vrai. OWIN est une interface et Katana est une implémentation de l'interface OWIN par Microsoft . Par conséquent, nous entendons ces 2 mots (OWIN / KATANA) ensemble et souvent nous nous confondons entre la différence entre ces 2 termes. Ainsi, Katana est l'implémentation de Microsoft de l'interface OWIN. Imaginons qu'une autre société nommée BIG-BOSS veuille créer sa propre implémentation de OWIN, ils peuvent le faire et nommer leur implémentation comme 'BATANA' et annoncer des expressions comme OWIN / BATANA.

Alors, pourquoi OWIN !!!

Pensez à un pays où le seul véhicule disponible pour se déplacer est un camion. Rien d'autre. Si vous voulez acheter un véhicule, vous achèteriez un camion. Eh bien, cela servait autrefois bien, mais les gens ont commencé à se rendre compte qu'ils n'avaient pas besoin de camion tout le temps, surtout quand ils veulent aller voir un film ou acheter du lait, conduire un camion lourd coûte non seulement beaucoup de carburant, mais aussi ajouter du stress à la conduite. Mais oui, s'ils veulent transporter beaucoup de choses lourdes, le camion sert très bien le but.

Ensuite, le gouvernement de ce pays a proposé une spécification pour les constructeurs automobiles. La spécification est la suivante:

  1. Un véhicule doit avoir 4 roues
  2. Un véhicule doit avoir une direction.
  3. Un véhicule doit avoir des phares et des feux de signalisation.

Ainsi, sur la base de ces spécifications, n'importe qui peut fabriquer un véhicule selon différents besoins et il peut nommer son véhicule en conséquence. Par conséquent, Sedan, Pickup Truck, SUV, VAN, ..etc .. toutes sortes de véhicules sont apparus sur le marché. Si quelqu'un n'a pas besoin de transporter des objets lourds tout le temps, a plutôt besoin d'un véhicule juste pour se rendre au travail, il peut acheter une petite berline. Quelqu'un peut acheter un SUV s'il a besoin d'un peu plus de puissance.

Sur la base de l'exemple ci-dessus, nous pouvons dire que notre application Web ASP.NET utilise System.Web Assembly qui est lourdement chargé (comme un camion) et si nous voulons créer une petite application Web où notre but est simplement de servir des fichiers basés sur un petit ensemble de demandes, nous sommes tenus d'utiliser cet assemblage System.Web lourd (camion). Maintenant, OWIN apparaît. OWIN est un ensemble de spécifications (on peut l'appeler interface) qui définit un serveur. Sur la base de cette spécification, quelqu'un (comme un constructeur de véhicules) peut créer différents types de serveurs en fonction de domaines de problèmes / d'applications spécifiques. Microsoft a créé sa propre implémentation pour OWIN nommée Katana de la même manière qui peut servir d'API Web. Comme WebAPI est une technologie légère, qui ne nécessite pas de système complet.

Maintenant, si vous demandez: « En ai-je besoin?'? La réponse est: «Cela dépend de votre besoin de performances». Si cela ne vous dérange pas de conduire votre camion même pour aller regarder un film, alors, vous n'avez peut-être pas besoin d'OWIN. Mais si vous le sentez, une berline légère est tout ce dont vous avez besoin pour conduire dans une ville, sur une petite distance, regarder un film ... etc. Oui, vous pouvez vérifier quelles implémentations d'OWIN sont disponibles sur le marché. Katana est l'une des implémentations d'OWIN, vous pouvez donc vérifier ce que Katana offre. Non seulement Katana, si une autre entreprise implémente OWIN selon un domaine spécifique (par exemple, un serveur pour les dispositifs médicaux qui téléchargera les dernières informations sur les médicaments) et si vous êtes médecin, vous pouvez peut-être vérifier cette implémentation d'OWIN. De plus, vous pouvez vous-même créer votre propre implémentation d'OWIN en ciblant n'importe quel créneau spécifique.

En termes d'applications Web, si vous êtes un simple développeur Web, développant peut-être des sites Web personnalisés pour vos clients, vous n'avez pas à vous soucier de la mise en œuvre personnalisée des OWIN, car IIS vous servira de manière équilibrée. Si vous créez un projet d'API Web, vous obtiendrez un modèle basé sur Katana prêt à l'emploi à partir de Visual Studio -> Nouveau projet, de sorte que vous n'aurez à vous soucier de rien d'autre que d'apprendre des techniques spécifiques à Katana. À l'heure actuelle, Katana n'est pas suffisamment mature pour remplacer complètement le besoin d'IIS pour ASP.NET MVC, mais peut-être que ce sera le cas à l'avenir.

Alors quand dois-je écrire ma propre implémentation OWIN?

Réponse: Eh bien, disons par exemple que vous avez développé une application Windows qui devrait fonctionner en tant que serveur en arrière-plan et écouter un numéro de port XXXX. Votre serveur ne répondra qu'à un ensemble de demandes comme celui-ci:

  1. GET Inventory
  2. SUPPRIMER ID inventaire = 4
  3. ID d'inventaire PUT = 5

C'est tout. Et rien d'autre. Alors, pourquoi auriez-vous besoin d'un serveur Web IIS complet pour cette petite tâche? Vous pouvez créer votre propre implémentation OWIN dans ce cas. (Peut-être, vous utiliserez Katana pour cela)

Ok, j'ai donc compris que si je veux créer un site Web ASP.NET MVC, je n'ai pas la possibilité de remplacer IIS, alors pourquoi devrais-je avoir besoin de connaître Katana en ce moment?

Réponse: Même si Katana n'est pas suffisamment mature pour remplacer le besoin d'IIS afin que vous puissiez héberger votre site Web ASP.NET MVC directement sur Katana, mais Katana a implémenté de nombreuses interfaces intéressantes d'OWIN afin que vous puissiez profiter de l'utilisation de ces fonctionnalités. de côté. Par exemple, autoriser vos utilisateurs à se connecter en utilisant Facebook, Google, Twitter, etc. n'était pas très facile auparavant. Katana vous offre de nombreux crochets (en tant que middleware) afin que vous puissiez laisser Katana s'occuper de l'authentification basée sur les médias sociaux externes facilement sans écrire de code de plomberie. L'utilisation de Katana présente de nombreux autres avantages que vous découvrirez peut-être lorsque vous commencerez à utiliser cette technologie.

Emran Hussain
la source
1
Je ne dirais pas que OWIN est une interface à proprement parler, c'est un standard, un protocole pour standardiser la façon dont une application parle à l'hôte. Mais il est important de préciser que Katana n'est qu'une implémentation de cette norme développée et maintenue par Microsoft. D'autres implémentations sont listées ici: github.com/owin/owin/wiki/Implementations
Stéphane
1
un peu déroutant quand vous dites que la spécification pour un véhicule est «4 roues» et que quelqu'un fabrique un véhicule à 18 roues ... ne correspond pas à la spécification, alors ...? ou est-ce que je manque quelque chose. Bonne analogie quand même. Rendu plus facile à comprendre
kurasa
1
@Stephane: Eh bien, ce n'est peut-être pas juste comme une interface, j'ai essayé de donner une idée de haut niveau afin que quelqu'un puisse comprendre la relation entre OWIN et KATANA sans être submergé par beaucoup de jargons techniques.
Emran Hussain
1
"Même si Katana n'est pas suffisamment mature pour remplacer le besoin d'IIS afin que vous puissiez héberger votre site Web ASP.NET MVC directement sur Katana" semble indiquer qu'IIS n'est pas important une fois que Katana est 1.0. Non, non, ce n'est pas correct. Microsoft propose Microsoft.Owin.Host.IIS, qui permet aux applications Web + Katana d'être hébergées directement sur IIS (sans System.Web bien sûr). IIS est toujours un composant clé pour les applications ASP.NET sur la plate-forme Microsoft.
Lex Li
2
Ce serait formidable, si vous pouvez m'aider à comprendre -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

Une version plus simple de cette réponse est que Katana est en train de remplacer complètement l'assemblage System.Web et l'ancien pipeline ASP.NET, ce qui vous offre à la fois une meilleure flexibilité (utilisez-la dans plus de scénarios et utilisez uniquement les pièces que vous aimez) et les performances.

Donc, tout le monde devrait regarder son évolution maintenant et être prêt à changer quand il sera finalement terminé.

Voici un diagramme que j'ai dessiné pour remplir les détails que Microsoft n'a pas inclus dans cet article .

entrez la description de l'image ici

OWIN est un tel standard qu'il laisse les frameworks d'application s'exécuter dessus et oublier tout ce qui se trouve en dessous. D'un autre côté, OWIN lui-même utilise divers adaptateurs hôtes pour s'assurer qu'il peut communiquer avec les serveurs Web sous-jacents (IIS et bien d'autres).

Je travaille maintenant avec l'auteur du serveur Web Jexus pour étudier comment nous pouvons écrire un adaptateur hôte pour relier OWIN / Katana et Jexus. Nous sommes vraiment heureux d'apprendre que OWIN est flexible et hautement personnalisable.

Référence: http://blog.lextudio.com/2014/06/why-owin-matters-a-lot-for-asp-net-developers/

Lex Li
la source
Donc, dans cette réponse, vous dites que "Katana est sur le point de remplacer complètement l'assembly System.Web et l'ancien pipeline ASP.NET". Cela signifie-t-il qu'il peut remplacer tous les adaptateurs de serveur dans votre diagramme ci-dessus, ou peut-être simplement host.systemweb?
netfed
@netfed malheureusement OWIN lui-même le fait et maintenant ASP.NET Core prend le relais. Cette question et les réponses sont toutes obsolètes.
Lex Li
Aha !! Le cœur d'Asp.net a donc des capacités Owin? Ou le noyau Asp.net fonctionne comme une collection de modules, où vous pouvez implémenter uniquement les modules dont vous avez besoin, sans avoir à utiliser une plus grande collection de fonctions intégrées dans System.web?
netfed
2
@netfed, OWIN meurt (mon clavier mobile a changé mes mots). ASP.NET Core conserve cependant l'approche middleware, et vous pouvez assembler ses composants comme vous le souhaitez, et pas plus System.Web.
Lex Li
Voilà qui conclut tout :-) Merci de la clarification.
netfed
15

Pourquoi devrais-je utiliser OWIN, alors que je peux utiliser IIS?

OWIN est conçu pour dissocier les serveurs Web des frameworks sous lesquels vous travaillez. Il peut rendre les applications légères et portables pour les frameworks de mixage et les serveurs.

Et Katana est l'implémentation par Microsoft des composants OWIN.

Depuis quelques années, Microsoft rend les outils Web plus agiles et réactifs à mesure que leur plan progresse. Par exemple, le développement d'ASP.Net MVC et d'ASP.Net Web API. Ils ne dépendent pas de la DLL System.Web qui est un énorme fardeau qu'ils ressentent maintenant, je pense. L'avantage est que les deux correctifs peuvent être fournis en temps opportun et que le cycle est plus rapide que jamais. Désormais, les développeurs peuvent également déployer ces applications sur des hôtes OWIN personnalisés ou Katana, qui est une référence de mise en œuvre OWIN.

À quoi bon après tout?

Microsoft a publié un projet qui est un hôte Web léger basé sur OWIN au-dessus d'IIS, appelé `Helios. Le but est d'éviter la relation ASP.NET/IIS en fournissant quelques petits composants indépendants qui peuvent être utilisés, installés et gérés indépendamment en s'exécutant sur un hôte Web qui implémente les spécifications OWIN.

L'une des principales raisons est le facteur de performance. Helios sera en mesure d'atteindre un débit 2x-3x plus élevé que l'application ASP.Net standard. En termes de consommation de mémoire, Helios est bien meilleur que la DLL System.Web. Dans une architecture de référence, Helios a permis à un exemple d'application de réaliser 50000 requêtes simultanées avec environ 1 Go de temps de travail en moins par rapport à une application ASP.Net standard.

nznoor
la source
1
Vous pourriez trouver cet article utile. simple-talk.com/dotnet/.net-framework/…
nznoor
0

OWIN est une abstraction entre l'application web et la plateforme d'hébergement. Si vous écrivez votre application Web en utilisant OWIN, vous n'êtes pas lié à IIS, vous pouvez utiliser un autre hôte si vous le souhaitez.

Vous avez demandé pourquoi utiliser OWIN plutôt que IIS, mais ce ne sont pas des alternatives les unes aux autres. OWIN se situe entre IIS et votre application afin que vous puissiez désactiver IIS sans réécrire votre application.

Vous pouvez également consulter cette page https://github.com/Bikeman868/OwinFramework/wiki/OWIN

bikeman868
la source