Utilisation de Cassini : un serveur web local de tests

Pierre Gaudin

Ce tutoriel va vous expliquer comment installer et configurer le serveur web Cassini. Nous verrons ensuite comment Cassini peut nous permettre d'exécuter des pages aspx sous Apache.

- Titre : Utilisation de Cassini : un serveur web local de tests

- Auteur : Pierre Gaudin

- Parution : 25 mai 2004

- Mise à jour : 27 février 2020

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Pierre Gaudin. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Présentation

- II. Installation et configuration

- III. Cassini et Apache

- III-A. Le principe de fonctionnement

- III-B. La mise en place

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

- V. Bibliographie

- VI. Ressources

I - Présentation

Cassini est un mini serveur développé par Microsoft et gratuit (c'est possible). À 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.

À 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.

À 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.

À 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.

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.
Lancez l'application en double cliquant sur CassiniWebServer.exe. Le panneau de configuration s'affiche alors.

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 :

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

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 cliquer dessus.

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.

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

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écifiez le chemin supplémentaire dans le chemin virtuel (exemple : /aplication2) pour accéder à cette page. Tapez l'adresse :

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 ».

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

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 faut 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.

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, supprimez 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 tâches) 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.

http://localhost:8080/WebApplication2

Pour revenir au mode conception fermez IE, Cassini s'arrête alors automatiquement ou arrêtez directement Cassini en cliquant sur « Stop ».

Un projet créé 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 a é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 de décommenter les modules mod_proxy et mod_rewrite et d'ajouter les lignes suivantes :

# 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 :

- lancez 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.

Lancez Internet Explorer et indiquez l'adresse :

http://localhost:8080/WebForm1.aspx

La page se charge normalement.

Maintenant, affichons la page via le serveur Apache.

http://localhost/aspnet/WebForm1.aspx

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

Allons encore plus loin.

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

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

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 ses limites. Ce tableau n'est pas exhaustif.

Possibilités

Limites

Chargement et affichage de pages ASP.NET

Source non disponible

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

Aide de Microsoft sur l'utilisation de Cassini

Forum Microsoft consacré à Cassini

VI - Ressources

Télécharger Cassini

Témoignages sur C#Builder

Télécharger WebMatrix

Apache V 2.048