Ce billet de blog fait partie de la série consacrée à la conférence NCrafts (à venir) qui s’est tenue à Paris le 16 Mai 2014.

Les speakers

Cette session était animée par deux personnes venues tout droit d’Italie, Simone  Chiaretta (@simoech) et Ugo Lattanzi (@imperugo). Deux MVP, passionnés de développement Web et très actifs dans la communauté .Net.
WP_20140516_023

La problématique

Le but de la session était de présenter OWIN et Katana, montrer quel peut en être l’intérêt par rapport à un IIS, et parler un peu de leur place dans l’avenir du développement Web en .Net.

L’architecture OWIN

OWIN signifie “Open Web Interface for .Net”. C’est un standard / une spécification décrivant une architecture de serveur Web léger (par rapport à IIS) avec des composants modulables (à l’opposé de Katana qui est son implémentation en .Net). A l’origine de ce projet on retrouve des membres de l’équipe ASP.Net. L’architecture définie par OWIN est très proche de celle d’un serveur écrit avec nodejs/expressjs,  ou de Rack (Ruby). Cette architecture est composée de  4 couches :

owincouches
L’Hôte est le processus qui exécute la ou les applications. Ca peut très bien être un simple éxecutable qui va lancer le service  ou encore un composant de IIS (il est effectivement possible de déployer son application web OWIN sur IIS). L’hôte est responsable du démarrage et l’arrêt du serveur et du chargement des composants OWIN.

Le Serveur correspond à la partie responsable de la liaison avec un port TCP et de la création du dictionnaire des variables d’environnement. C’est aussi lui qui va gérer la transmission des demandes à l’ensemble des modules OWIN se trouvant dans la couche Middleware.

Les Middlewares sont les modules chargés par le serveur qui peuvent traiter les demandes reçues par celui-ci. Ca peut être des composants de compression, cryptage, de gestion des logs… Ces Modules sont exécutés les uns à la suite des autres (à la manière d’une chaîne de responsabilités) avant l’exécution de votre code. ils ont aussi la possibilité d’ajouter des objets dans le dictionnaire des variables d’environnements, objets qui pourront ensuite être utilisés par votre code.

La dernière couche est celle de votre application. Généralement le code écrit est exécuté par le dernier middleware. Lorsqu’on travaille avec Nancy, par exemple (framework MVC compatible OWIN), le dernier module exécuté est le middleware NANCY (github). En pratique développer sur Katana revient donc souvent à écrire du code qui va s’intégrer à un middleware ou alors qui va en hériter. Il est quand même toujours possible d’écrire entièrement son propre middleware.

nqncy

Et Katana dans tout ça ?

Katana se retrouve sur Nuget via ensemble de librairies :
katananuget
Lorsqu’un serveur OWIN/Katana s’exécute, son point d’entrée est une classe généralement appelée classe Startup. Cette classe est celle qui va initialiser, dans sa méthodeConfiguration, le routage et les différents middlewares/modules utilisés.
Chaque middleware est un module fournissant un delegate dont la définition est la suivante :
owindele

Pourquoi utiliser OWIN/Katana plutôt que IIS ?

En plus d’être bien plus léger que IIS, l’idée première d’OWIN est d’avoir un standard respecté par les projets web.

Le fait d’avoir la possibilité de se séparer de IIS est une vraie problématique, car IIS est fortement lié à l’OS. Toute mise à jour ou nouvelle fonctionnalité (par exemple websockets) passe par une mise à jour de l’OS.
iisos
Avec un serveur implémentant OWIN, une nouvelle fonctionnalité peut se limiter tout simplement à un nouveau middleware.

L’avenir d’OWIN : Le projet K

En avril dernier Microsoft a annoncé que OWIN/Katana sera intégré à la prochaine version de ASP.NET. (http://www.zdnet.com/microsoft-shows-off-the-next-release-of-asp-net-7000029335/)

kfuture
Il s’agit donc d’une technologie à suivre.

Pour aller plus loin :

http://blogin.codeinside.eu/2012/06/12/owin-what-is-it-about-and-why-is-it-so-cool/
http://whereslou.com/2012/05/14/owin-compile-once-and-run-on-any-server
https://github.com/owin/owin/wiki
http://codeclimber.net.nz/
https://katanaproject.codeplex.com/releases/view/113281
http://benfoster.io/blog/how-to-write-owin-middleware-in-5-different-steps
http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana
https://amethyste16.wordpress.com/2014/04/16/ecriture-dun-middleware-katanaowin/
Les slides de la session :
http://www.slideshare.net/imperugo/owin-and-katana