mardi 26 octobre 2010

utiliser Castle Monorail dans un site web asp.net

Dans notre plateforme nous avons un gros site web Asp.Net (avec des webforms et web service) et il y a peu nous avons découvert Castle Monorail , qui est en gros un framework MVC pour Asp.Net genre Asp.Net MVC mais qui marche aussi avec le framework 2.0.

Pour pouvoir utilsier ce framework dans un site web asp.net voici les étapes :

1 - Copier les DLL de castle monorail


Castle.Components.Binder.dll

Castle.Components.Common.EmailSender.dll

Castle.Components.Common.TemplateEngine.dll

Castle.Components.Common.TemplateEngine.NVelocityTemplateEngine.dll

Castle.Components.Validator.dll

Castle.Core.dll

Castle.MonoRail.Framework.dll

Castle.MonoRail.Framework.Views.NVelocity.dll

Castle.MonoRail.ViewComponents.dll

NVelocity.dll

Certaine ne sont pas forcément tous le temps essentielle (notamment celles sur NVelocity).

2 - Configuration :


Tout se fait dans web.config

- Déclaration de la section de configuration
[sourcecode language="xml"]<section name="monorail" type="Castle.MonoRail.Framework.Configuration.MonoRailSectionHandler, Castle.MonoRail.Framework" />[/sourcecode]
- La configuration en elle-même
[sourcecode language="xml"]
<monorail>
<controllers>
<assembly>App_Code</assembly>
<assembly>Castle.Monorail.ViewComponents</assembly>

</controllers>
<viewEngines viewPathRoot="Views">
<add type="Castle.MonoRail.Framework.Views.NVelocity.NVelocityViewEngine, Castle.MonoRail.Framework.Views.NVelocity" />
</viewEngines>
</monorail>
[/sourcecode]

On remarque le
[sourcecode language="xml"]<assembly>App_Code</assembly>[/sourcecode]

Qui déclare l'assembly App_Code (celui crée par .net à partir du dossier App_Code du site web) qui contiendra nos controller (on peut ainsi importer des assembly d'autre projet en les ajoutant ici).

les HttpHandlers (pour interdire les accès direct au vm et rediriger les .rails vers Monorail)
[sourcecode language="xml"]<add verb="*" path="*.rails" type="Castle.MonoRail.Framework.MonoRailHttpHandlerFactory, Castle.MonoRail.Framework" />
<!--block direct user access to template files-->
<add verb="*" path="*.vm" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.boo" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.st" type="System.Web.HttpForbiddenHandler" />
[/sourcecode]

Et le http module
[sourcecode language="xml"]<add name="monorail" type="Castle.MonoRail.Framework.EngineContextModule, Castle.MonoRail.Framework" />[/sourcecode]


3 - IIS


Dans la console d'adminstration de IIS (IIS 6 pour moi)
-Il faut aller jusqu'a la racine du site web
-Click-droit sur la racine
-Properties
-Onglet Directory
-Bouton Configuration
-Double click sur la ligne de l'extension .aspx
-Copie le chemin de l'exécutable (quelque chose comme "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll")
-"Cancel"
-Bouton "Add..."
-On colle le chemin dans la première text box
-".rails" dans la deuxième
-"verify that file exists" -> Décoché
- Ok , OK , OK

4 - TEST



Fichier TestMonorailController.cs à mettre dans le dossier App_Code (dans un sous dossier si besoin)
[sourcecode language="csharp"]
using Castle.MonoRail.Framework;

public class TestMonorailController : SmartDispatcherController
{
    public TestMonorailController()
    {
    }
    public void OnePage()
    {
        PropertyBag["toto"] = "TEST";
    }
}[/sourcecode]
Fichier OnePage.vm à mettre dans /Views/TestMonorail/ du site web
[sourcecode language="html"]$toto[/sourcecode]
Dans la navigateur on accède à
"http://laracinesdemonsite.com/TestMonorail/onePage.rails".
Et la on devrait voir s'afficher "TEST" .

Et voila.