# Tuesday, June 19, 2007

[IIS7] Architecture de IIS 7

Je vous en avais parlé récemment lors d'un précédent post afin de vous indiquer les manipulations à faire pour travailler avec IIS7 depuis votre Visual Studio préféré (2005 ou 2008), IIS7 la version de Internet Information Services proposé dans Windows Vista et Windows Server 2008 se base sur une architecture totalement nouvelle qui romp fortement avec ce que l'on connaissait avec IIS6.

L'architecture de IIS7 repose sur deux principes essentiels qui sont les deux gros points forts de cette nouvelle édition du serveur web du géant de Redmond :

  • Modularité
  • Extensibilité

La modularité est une rééllle nouveauté pour IIS car IIS6 propose certes une nouvelle architecture avec l'apparition du module http.sys, des application pools et des worker process, mais l'ensemble reste totalement monolythique, présent en un seul bloc. L'essentiel des fonctionnalités proposées par IIS 6 étaient proposées sous la forme d'une seule dll : wp3p.exe. Conséquence de cela, lorsque vous souhaitez utiliser IIS6, vous êtes obligés d'utilisés tous les éléments proposés par Microsoft sans être capable de réellement personnalisé son comportement à vos besoins. Si vous souhaitez disposer d'un serveur web très léger et spécialisés, il est préférable de se tourner vers un serveur web de type Apache qui vous permettra de définir les différents modules que vous souhaitez au lieu d'utiliser de IIS 6 qui est un serveur web livré clé en main et non modulaire.

IIS7 change tout cela en proposant une architecture basée sur des modules. Toutes les fonctionnalités proposées par IIS sont à présent proposées sous forme de modules activables et désactivables à souhait. Ainsi si vous ne souhaitez pas utiliser le module de cache, le module de log, etc.. proposé par Microsoft, vous êtes tout à fait libre de supprimer l'utilisation de ces modules pour les sites web que vous souhaitez. Il vous est donc possible de rééllement personaliser le comportement du serveur web comme vous le souhaitez. Avec IIS7 vous disposez donc d'un noyau de réceptionde requêtes HTTP renvoyant une réponse, et tout ce qui se passe entre la réception de la requête et l'envoi d'une réponse est totalement personnalisable via l'utilisation ou non des modules proposés par IIS.

image

Ainsi si vous souhaitez personnaliser IIS7 afin de servir uniquement des pages statiques, vous pouvez n'utiliser que 2 ou 3 modules afin d'avoir un serveur web très léger et optimisé pour votre besoin. Il vous suffit donc d'activer les modules StaticFileModule, AnonymousAuthenticationModule afin de renvoyer des pages statiques (vous pouvez également utiliser le module DefaultDocumentModule afin d'être capable de définir un document par défaut pour vos dossiers présents dans votre site web).

Qui dit réélle modularité dit extensibilité. IIS7 propose bien cette extensibilité en vous proposant tout simplement de développer vos propres modules. Ainsi en plus de pouvoir activer/désactiver les modules proposés par Microsoft, vous pouvez développer vos propres modules afin de rééllement personnaliser le comportement du serveur web. Si vous n'aimez pas l'implémentation de l'authentification proposé dans IIS, libre à vous de développer votre propre module d'authentification qui répondra exactement à vos besoins.

Cette extensibilité est vraiment nouvelle car une des seules possibilités d'extensibilité de IIS6 repose dans la possibilité de développer des filtres ISAPI. Ces filtres ISAPI sont utilisés afin d'exécuter du code serveur (ASP.net, PHP, etc.) afin de générer une réponse. Ces filtres ISAPI doivent être développé en natif, en C++, exit donc les développeurs .net fan de C# ou VB.net.

IIS 7 propose quand à lui de développer ses modules en C++ mais également en code managé grâce au langage C#, VB.net, etc...

Microsoft eux-même utilisent cette extensibilité afin de proposer l'intégration d'ASP.net. Et oui, l'exécution d'ASP.net ne se fait plus via un filtre ISAPI ! Elle se fait via un module ou pour être exact via plusieurs modules ! L'architecture de IIS6 propose en effet un inconvénient majeur : certaines fonctionnalités sont redondantes. En effet, si vous déployez une application ASP.net sur un IIS5 ou un IIS6, plusieurs fonctionnalités sont redondantes et sont implémentées et par le serveur et par l'application web. On peut par exemple citer l'exemple de l'authentification. IIS 6 propose en effet plusieurs mode d'authentification, authentification qui va de nouveau être effectuée par l'application web ! L'utilisation de modules simplifie fortement les choses puisque qu'au lieu d'activer l'authentification anonyme coté serveur et activer l'authentification par formulaire du coté d'ASP.net, nous pouvons tout simplement utiliser le module d'authentification par formulaire au niveau de IIS7 et le tour sera joué.

image

Tous ces profonds changements peuvent dans de rares cas impacter vos applications existantes, et IIS7 propose donc 2 modes de fonctionnements : le mode intégré (pur IIS7) et le mode classic à la IIS6.

Dans un prochain post nous verrons les nouveautés liées à la configuration de IIS7 et vous aurez d'excellentes surprises...

Stay tuned...

# Monday, June 04, 2007

[Orcas] Visual Studio Orcas (et même 2005) et IIS 7

Windows Vista vous permet d'exécuter vos applications web au sein de la nouvelle version du serveur web phare de Microsoft : IIS7.

Cette nouvelle version de IIS qui succède à IIS 6 apparu avec Windows Server 2003 propose une architecture radicalement différente dont le maitre mot est : EXTENSIBILITE ! J'y reviendrais prochainement dans un prochain post...

Quoiqu'il en soit, il est difficile de travailler avec Visual Studio (2005 ou Orcas) et IIS7 pour la simple raison que Visual Studio ne supporte pas IIS7 ! Espérons que cela sera le cas avec la version finale de Orcas...

Afin d'être capable d'héberger vos applications au sein de IIS7, vous allez donc devoir utiliser votre IIS7 comme un IIS6 afin que Visual Studio puisse retrouver ses petits et être capable de browser les sites qui sont dans votre IIS, et bien évidemment débugger ces applications.

Pour cela, vous devez commencer par installer la couche de compatibilité IIS6. Pour cela rendez-vous dans le panneau de configuration, et rendez vous dans les fonctionnalités Windows. Déroulez le noeud Internet Information Services et cochez l'élément couche de compatibilité IIS6.

image

Une fois que cette couche est installé, il vous est techniquement possible d'utiliser IIS7 avec votre Visual Studio préféré en effectuant quelques manipulations de configuration.

Première chose, pensez à toujours démarrer Visual Studio en tant qu'administrateur. Si ce n'est pas le cas vous ne serez pas capable de browser les sites hébergés par IIS.

Une fois avoir lancé Visual Studio en tant qu'administrateur, vous pouvez très bien créer votre site web comme vous le faites d'habitude. Visual Studio communiquera sans problème avec IIS afin de créer le répertoire virtuel correspondant.

Les prochaines étapes concernent le débuggage car même si vous parvenez à créer votre application web, vous n'êtes pour le moment pas capable de la débugger. Un appui sur la touche F5 vous affichera ce message d'erreur que vous connaissez sans doute déjà.

image

Rendez-vous donc dans IIS7 afin d'activer l'authentification Windows intégrée.

Pour cela exécuter inetmgr afin d'afficher la console d'administration de IIS qui a été totalement repensée :

image

Rendez-vous dans la zone Authentication et activez l'authentification Windows intégrée.

image

Une fois l'authentification intégrée activée si vous retournez dans Visual Studio et que vous faites F5 vous aurez de nouveau un message d'erreur :

image

Ceci est du au mode de gestion de votre application par IIS.

IIS7 propose en effet deux modes de gestion d'application :

  • le mode classique qui traite les requêtes comme IIS6
  • le mode intégré ou IIS7 utilise des modules natifs et/ou managés afin d'éxécuter le code à la place des traditionnels filtres ISAPI

Par défaut le mode intégré est utilisé, le mode classique étant nécessaire pour être capable de débugger vos applications Web.

Afin de switcher entre ces deux modes, vous devez changer l'application pool de votre site web afin d'utilser un application pool utilisant le mode classique.

image

Une fois cette modification effectuée, vous pourrez enfin débugger votre application web depuis Visual Studio !