I. Présentation

Cassini est un mini serveur développé par Microsoft et gratuit (c'est possible). A l'origine il était contenu dans l'application ASP .NET Web Matrix qui n'est en fait qu'une version allégée et gratuite de Visual Studio et qui permet de développer des pages ASP.NET. Il est maintenant disponible directement chez Microsoft et un Forum de discussion lui est consacré.

Grâce à ce serveur HTTP autonome, vous pourrez développer et tester vos pages ASP .NET sur Windows XP Edition Familiale et ce, sans avoir à installer et configurer le serveur IIS sur votre machine. En effet, Cassini n'a pour seul objectif que de faire tourner en local des applications ASPNET lors du développement de pages. Il est bien sûr nécessaire d'installer Net framework au préalable.

Toutefois, selon les spécifications de Microsoft ce serveur ne répond pas aux requêtes venant des machines "extérieures" mais nous verrons qu'il peut s'interfacer astucieusement avec Apache afin de lire des pages ASPNET et même d'accéder aux pages asp.NET via un ordinateur distant. Cassini n'est donc pas qu'un simple serveur local.

Cassini est développé en C# et bien que les sources soient contenues dans le package, elles ont été traitées par un obfuscateur afin qu'elles ne soient pas déchiffrables. Une version totalement libre sera sûrement disponible sous peu.

II. Installation et configuration

L'installation de Cassini n'est pas optimisée. Toutefois il s'agit d'une étape relativement simple lorsque l'on dispose d'un bon tutoriel…

  • Dans un premier temps téléchargez Cassini sur le site Web (214 KO !!!) et décompressez l'archive sur votre disque dur.
  • Lancez ensuite l'exécutable Cassini.exe. Une première fenêtre d'information sur les OS supportant Cassini et résumant les possibilités du serveur local s'affiche. Cliquez sur "Next".
  • La fenêtre suivante comporte la licence d'utilisation. Vous pouvez voir que Cassini est libre d'utilisation (Utilisation commerciale ou non !) mais que son utilisation se fait à vos risques et périls quant aux éventuels dommages provoqués par Cassini. Cocher la case « I accept the terms in the license agreement » puis cliquez sur « Next ».
  • Choisissez le répertoire dans lequel installer Cassini, puis cliquez sur « Next ».
  • L'installshied installe alors Cassini dans le répertoire spécifié puis ouvre le fichier ReadMe.TXT. Ce fichier vous indique comment installer Cassini mais il est très incomplet pour installer correctement cassini. Vous pouvez donc fermer cette fenêtre.

A ce stade rien n'est installé seuls les fichiers utiles à Cassini ont été copiés dans le dossier spécifié. Les étapes suivantes vont vous amener à compiler le "serveur Local" afin d'obtenir un fichier EXE.

Remarque : il ne s'agit pas d'un exécutable classique mais d'un fichier en byte code que seul Net FrameWork sait interpréter

A l'aide de l'Explorateur Windows, allez dans le répertoire de Cassini et cliquez avec le bouton droit de la souris sur le fichier build.bat et sélectionnez « modifier ». Il apparaît alors dans le bloc note des lignes de code qui sont exécutées lorsque vous double cliquez sur build.bat.

Image non disponible

A la lecture du code vous remarquez qu'il y a trois étapes qui sont la compilation de la dll Cassini.dll, l'installation de cette DLL dans l'assembly et enfin la compilation de CassiniWebServer.exe. Pour les étapes de compilation vous avez besoin de l'outil « csc.exe » et pour l'installation de la DLL de « gacutil.exe ». Vous remarquerez que les chemins d'accès à ces exécutables ne sont pas valides. Il va donc falloir spécifier manuellement ces chemins d'accès aux lignes 14, 20 et 26.

Le fichier "csc.exe" se trouve dans le répertoire "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322". Le fichier "gacutil.exe" quant à lui se trouve dans le dossier "C:\Program Files\Microsoft.NET\SDK\v1.1\Bin". Afin de faciliter l'installation de Cassini je vous conseille de le copier ainsi que le fichier « gacutil.exe.config » dans le même répertoire que "csc.exe".

Voici le code complet du fichier build.bat pour une installation standard. Ceci peut varier selon l'emplacement de Net Framework.

 
Sélectionnez
echo ------------------------------------------------------------------------



echo Compiling Cassini.dll ...

echo ------------------------------------------------------------------------

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /t:library /r:System.dll /r:System.Web.dll

 /out:Cassini.dll AssemblyInfo.cs ByteParser.cs ByteString.cs 

Connection.cs Host.cs Messages.cs Request.cs Server.cs

if errorlevel 1 goto problems



echo ------------------------------------------------------------------------

echo Installing Cassini.dll into Global Assembly Cache ...

echo ------------------------------------------------------------------------

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\gacutil.exe /i Cassini.dll if errorlevel 1 goto problems



echo ------------------------------------------------------------------------

echo Compiling CassiniWebServer.exe application ...

echo ------------------------------------------------------------------------

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe /t:winexe /r:System.dll /r:System.Drawing.dll /r:System.Windows.Forms.dll

/r:Cassini.dll /win32icon:CassiniWebServer.ico /res:CassiniWebServer.ico,CassiniWebServerIcon 

/out:CassiniWebServer.exe CassiniWebServerMain.cs

if errorlevel 1 goto problems



echo ------------------------------------------------------------------------

echo Done: to run please specify port, virtual and physcal path, for example:

echo -----------------------------------

echo CassiniWebServer c:\temp 8080 /temp

echo -----------------------------------

goto done

:problems

echo ---------------

echo Errors in build

echo ---------------

:done

Une fois les modifications effectuées enregistrez le fichier Build.bat et exécutez-le. Si tout se passe bien, deux nouveaux fichiers sont créés (CassiniWebServer.exe et Cassini.dll) dans le répertoire de Cassini. Vous venez d'effectuer la partie la plus ardue de ce tutoriel.

Il est maintenant nécessaire de tester le serveur Local et de le paramétrer :
Il faut tout d'abord créer un répertoire racine pour vos pages web. Dans cet exemple nous avons créé le répertoire d:\www qui servira à héberger les pages web.
Lancer l'application en double cliquant sur CassiniWebServer.exe. Le panneau de configuration s'affiche alors.

Image non disponible

La première zone de texte doit comporter le répertoire racine. Pour nous, il s'agira de « d:\www ». La seconde ligne correspond au numéro de port à utiliser. Même s'il s'agit d'un serveur http l'utilisation du port 80 pose problème. Je vous conseille donc d'utiliser le port 8080 qui lui n'est utilisé par aucune autre application. Enfin la troisième ligne correspond au chemin virtuel. Il correspond au chemin comportant les pages à afficher à partir du dossier racine.

Une fois tous les paramètres saisis, cliquez sur « Start » pour démarrer le serveur. Voici les messages d'erreur possible :

Image non disponible

vous indique que le répertoire de l'application est invalide, vérifiez que l'adresse du répertoire racine est la bonne.

Image non disponible

changez de numéro de port

Une fois le serveur Local correctement démarré, les boîtes de saisie se grisent et un hyperlien vers la racine de vos pages Web apparaît en bas de la fenêtre. Vous pouvez alors cliquez dessus.

Image non disponible

Si le serveur Local est correctement démarré une fenêtre d'Internet Explorer s'ouvre et les fichiers et dossiers du répertoire s'affichent alors.

Image non disponible

Remarque : L'adresse du local host se compose du mot clé Localhost suivi du numéro de port utilisé.

 
Sélectionnez
http://localhost:8080

Vous pouvez tester l'affichage d'une page asp.net de test. Cette page doit être contenue directement dans le dossier d:\www sinon spécifié le chemin supplémentaire dans le chemin virtuel (exemple : /aplication2) pour accéder à cette page. Tapez l'adresse :

 
Sélectionnez
http://localhost:8080/test.aspx

Si la page s'affiche correctement, votre serveur est en état de fonctionner.

Vous pouvez arrêter le serveur en cliquant sur "Stop".

Lancer C# Builder. Dans le menu « Outil » cliquez sur « Options ». La boîte de dialogue de configuration des options s'affiche.

Image non disponible

Cliquez sur l'item "Options ASP.NET".
Dans la partie "Serveur Web Cassini" indiquez le "chemin" d'accès au fichier CassiniWebServer.exe et le "port" (ici 8080) à utiliser par défaut
Dans le cadre "paramètre par défaut du nouveau projet Web", indiquez le répertoire racine de vos pages Web (ici d:\www) ainsi que le "Serveur Web" à utiliser par défaut : Serveur Web Cassini.

Cliquez sur "Ok" pour enregistrer les paramètres et pour fermer cette boîte de dialogue.

Remarque : Par défaut tous les projets ASP.NET seront conçus avec le serveur local Cassini. Si ultérieurement vous souhaitez utiliser IIS, il faux refaire cette modification en indiquant que le serveur Web est Internet Information Serveur (IIS).

Nous allons maintenant créer une page ASP.NET afin de tester Cassini.

Créer un nouveau projet ASP.NET "Fichier" "Nouveau" "Application Web ASP.NET". Une boîte de dialogue s'ouvre.

Image non disponible

Comme vous avez informé C# Builder que vous souhaitiez utiliser Cassini par défaut il est automatiquement sélectionné comme serveur. Si vous souhaitez utiliser IIS, changez le nom du « Serveur ». De même le répertoire par défaut est D:\www\. Il est préférable de ne pas modifier cette ligne. Par contre vous pouvez changer le « Nom » de l'application. Le changement se fera alors automatiquement sur la ligne "Chemin" et un nouveau répertoire sera créé.

Remarque : Pour créer un projet à la racine supprimer le "Nom" de répertoire qui est ajouté automatiquement sur la ligne "Chemin".

Une fois tous les champs correctement renseignés, cliquez sur OK. Un nouveau projet est alors construit.

Mettez un composant Web Form sur la page principale et exécutez l'application.
Le serveur Local est alors automatiquement démarré sur le port 8080 (une icône apparaît dans la barre des taches) et le fichier aspx est chargé dans Internet Explorer.
Veillez bien à ce qu'il n'y ait qu'un seul serveur démarré sur le même port.

Remarque : C# Builder donne automatiquement le chemin par défaut "http:// "le localhost" : "numéro de port" / "nom de l'application" " comme chemin racine.

 
Sélectionnez
http://localhost:8080/WebApplication2

Pour revenir au mode conception fermer IE, Cassini s'arrête alors automatiquement ou arrêter directement Cassini en cliquant sur "Stop".

Un projet créer avec Cassini comme serveur s'ouvre automatique avec ce dernier. Toutefois il est possible de changer pour un projet le serveur par défaut. Pour ce faire lorsque le projet est chargé dans C# Builder cliquez sur "Projet" puis sur "Options". La boîte de dialogue "Options pour projet" s'ouvre alors. Cliquez sur "Options ASP.NET" et modifiez les valeurs du cadre "Hébergé par un serveur".

Voilà vous êtes maintenant prêt pour développer votre projet ASP.NET sans avoir besoin d'installer le serveur IIS sur votre ordinateur.

Comme cela à été très simple vous êtes encore plein de courage pour pousser l'expérience un peu plus loin et voir comment Cassini peut s'interfacer avec Apache afin de lire des pages ASP.NET sur votre serveur préféré et comment Apache permet d'utiliser Cassini depuis un ordinateur distant.

III. Cassini et Apache

La question vous trotte depuis longtemps ASP.NET et Apache cela est il possible ? Cassini est une manière de répondre oui.

Remarque : Nous avons réalisé ce test à l'aide d'Apache V2.048. Avec une version antérieure ceci ne fonctionne pas.

Voici l'idée : L'objectif consiste à mettre en place une redirection par proxy ou encore proxy_redirect. Le schéma suivant nous illustre le principe de fonctionnement général de la redirection par proxy.

III-A. Le principe de fonctionnement

Lorsqu'un utilisateur émet une requête de type ASPX à destination du serveur Web, les opérations suivantes sont réalisées :

  • Apache récupère sur le port 80 le répertoire virtuel spécifié dans la requête ;
  • si le répertoire virtuel correspond à celui qui se trouve dans son fichier de configuration, en l'occurrence /aspnet, il redirige la requête vers le serveur chargé de comprendre cette requête, en l'occurrence ici Cassini sur le port 8080 ;
  • pour finir, la requête est traitée par Cassini qui renvoie simplement la réponse sous la forme d'un flux HTML à Apache. Le flux est ensuite redirigé au client qui se charge de l'afficher par le biais de son navigateur.

III-B. La mise en place

Pour mettre ce service en place il faut éditer le fichier HTTP.CONF, dans le but d'y insérer les entrées correspondantes au Proxy Redirect. Pour ce faire, il suffit simplement de dé-commenter les modules mod_proxy et mod_rewrite et d'ajouter les lignes suivantes :

 
Sélectionnez
# Configuration Cassini 

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule rewrite_module modules/mod_rewrite.so

                                

# Configuration Cassini 

ProxyPass /aspnet http://127.0.0.1:8080/

ProxyPassReverse /aspnet http://127.0.0.1:8080/

Pour tester cette implémentation :

  • lancer le serveur Apache et le serveur Cassini sur le port 8080 avec le répertoire d'application d:\www ;
  • créez une application ASP.NET à la racine d:\www.

Lancer Internet Explorer et indiquer l'adresse :

 
Sélectionnez
http://localhost:8080/WebForm1.aspx

La page se charge normalement.

Image non disponible

Maintenant affichons la page via le serveur Apache.

 
Sélectionnez
http://localhost/aspnet/WebForm1.aspx
Image non disponible

Aucune erreur n'est affichée et la même page est chargée !

Allons encore plus loin.

Nous savons que Microsoft à volontairement bridé Cassini afin qu'il ne fonctionne qu'en local. Apache va nous permettre de contourner cette limitation.

Depuis un ordinateur distant appeler une page aspx sur le serveur (on supposera ici que le serveur a l'adresse 192.168.0.3) :

 
Sélectionnez
http://localhost:8080/WebForm1.aspx

IV. Ce que l'on peut attendre de Cassini en résumé

Voici résumé brièvement ce qu'il est possible de faire avec Cassini et ces limites. Ce tableau n'est pas exhaustif.

Possibilités Limites
Chargement et affichage de pages ASP.NET Source non disponibles
Fonctionnement sous Windows 98 et plus  
Interface avec apache pour lire des pages ASP.NET avec apache  
Libre d'utilisation  
Autonome  
Connexion au serveur à distance  

V. Bibliographie

VI. Ressources