Je vous propose de voir dans ce post les étapes à suivre pour publier une application Hello World ASP.NET MVC dans Azure.

Je suis parti des versions suivantes :

- Visual Studio 2008 SP1 + .NET Framework 3.5 SP1
- Windows Vista SP1 (le SDK d’Azure a pour l’instant quelques soucis sur Windows 7)
- Azure SDK CTP de Janvier 2009 : http://go.microsoft.com/fwlink/?LinkID=130232
- les outils Azure CTP de Janvier 2009 pour Visual Studio 2008 SP1 : http://go.microsoft.com/fwlink/?LinkId=128752
- ASP.NET MVC Beta : http://asp.net/mvc

Je ne reviendrais pas sur ce qu'est MVC ou Azure vu que nous sommes à moins d’1 mois du TechDays 2009 où ces sujets vous seront présentés en détails. D’ailleurs, pour ma part j’animerais ces sessions là.

Allez, c’est parti pour ASP.NET MVC dans le nuage.

Tout d’abord, lancez VS 2008 en élévation administrateur. Cela est nécessaire pour pouvoir ensuite lancez votre application dans l’émulateur de fabriques. Créez une application Web / ASP.NET MVC Web Application:

image

Ne créez pas de tests unitaires. Modifiez le contenu des pages de présentation comme vous le voulez et testez votre application.

Pour pouvoir aider Visual Studio à préparer un package de déploiement dans Azure, ajoutez un projet à votre solution de type “Cloud Service” / “Blank Cloud Service”

image 

Cependant, vous observerez que suite à cela, vous ne pouvez pas promouvoir votre application ASP.NET MVC en tant que WebRole:

image

“Web Role Project in solution…” étant grisé.

Pour que VS voit votre projet comme “ajoutable”, ouvrez le fichier .csproj associé à votre projet ASP.NET MVC dans Notepad et ajoutez ces lignes dans le tout 1er <PropertyGroup>:

<RoleType>Web</RoleType>

<ServiceHostingSDKInstallDir Condition=" '$(ServiceHostingSDKInstallDir)' == '' ">$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\ServiceHosting\v1.0@InstallPath</ServiceHostingSDKInstallDir>

Juste après celle-là:

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

Sauvegardez dans Notepad. Visual Studio s’aperçoit de la modification et souhaites recharger le fichier:

image

Faites “Reload”.

Maintenant, on peut bien ajouter notre projet web en tant que Web Role:

image

Choisissez votre projet Web ASP.NET MVC. A ce stage, si l’on démarre le projet Cloud Service, on voit bien une instance de créée dans ma “Development Fabric” :

image

Et notre application ASP.NET MVC semble bien fonctionner. Cependant, si vous déployez en l’état l’application dans Azure, elle ne va pas fonctionner car Azure ne sera pas capable de trouver les Assemblys spécifiques à MVC. Pour résoudre cela, rien de plus simple, rendez-vous dans les propriétés des références suivantes: “System.Web.Mvc”, “System.Web.Abstractions” et “System.Web.Routing” et changez la propriété “Copy Local” de “false” à “true”.

image

Voilà, nous sommes prêts à déployer dans Azure. Pour cela, faites bouton droit sur le projet Cloud Service et faites “Publish”:

image

Visual Studio vous ouvre alors le répertoire où se trouve le package à déployer ainsi que le fichier de configuration (indiquant entres autre le nombre de frontaux Web à réserver à votre application). Visual Studio vous dirige également vers le portail Azure.

image

Rendez-vous sur votre projet Azure et cliquez sur “Deploy”:

image

Cliquez sur les 2 boutons “Browse” et entrez le chemin vers le répertoire que Visual Studio vous a ouvert. Le 1er prend une extension de type “.cspkg” et le 2ème de type “.cscfg”. Cliquez enfin sur “Deploy”.

image

Arrivé à ce stade là, cliquez sur “Run”

image

Une fois l’application démarrée:

image

Vous pouvez la tester en mode pré-production (“Staging”) et ensuite la mettre en production en cliquant simplement sur cette icône: image

Et voici le résultat final en production dans le nuage!

image

Pour terminer, je vous recommande la lecture de cette série de posts très intéressante (en Anglais) montrant comment migrer une application MVC complète dans Azure: http://blog.maartenballiauw.be/post/2008/12/09/Track-your-car-expenses-in-the-cloud!-CarTrackr-on-Windows-Azure-Part-1-Introduction.aspx

A bientôt aux TechDays!

David