ASP.NET MVC2- Par ou commencer?

On le dit depuis le début, un des points forts du framework ASP.NET MVC par rapport à d’autres produits Microsoft c’est qu’il y a une forte implication de la communauté dans le processus de développement. Pour la V1, la première preview a été présenté 1 an et demi avant la version finale et entre les deux une dizaine de versions intermédiaires avec à chaque fois le source.

C’est en grande partie pourquoi le produit était déjà grandement mature en v1.0.

C’est d’autant plus le cas avec la V2 qui continue avec sa présentation à la communauté des sources + binaires.

Celle-ci apporte quelques bugfixes bien sur, mais surtout elle se veut “Enterprise Ready”. Le but étant d’apporter àu framework tous les éléments nécessaires aux applications d’entreprise. Ceci est à mettre en comparaison de la V1 qui un peu vue comme “Geek friendly” par certains mais n’apportant pas assez d’outillage pour les besoins usuelles des applications d’entreprise.

Je vous rassure, pas de gros changements…

Les principaux objectifs sont:

  • d’apporter plus d’aide au développement par de nouveaux helpers, templates, génération de code (Templated helpers, actions partielles)
  • apporter plus de fiabilité aux données et simplifier leur validation et description (Data Anotations, Validation)
  • Permettre d’isoler plus simplement des blocs applicatifs et éventuellement leur réutilisation entre plusieurs projets (Areas)
  • Apporter le support des longs traitements (Async controllers)

 

Ok, je veux essayer?

oui, le dernier binaire d’installation de la RC sous Visual Studio 2010 est disponible depuis le 16 décembre sur le site de Microsoft et les sources sur CodePlex.

 

Attention cependant avec Visual Studio 2010.

Aujourd’hui les beta/rc de Visual Studio 2010 et ASP.NET MVC ne sont pas en phase car MVC intègre des features en avance par rapport à ce qui est supporté dans Visual Studio. Il s’agit principalement de problématiques du designer et non du Framework .Net 4. les Versions finales RTM de ASP.NET MVC 2 et de Visual Studio 2010 seront par contre bien sur en phase et livrées en même temps.

En attendant la version finale, il faut de préférence utiliser l’installeur pour Visual Studio 2008 pour profiter de toutes les features du designer.
Pour travailler sous Visual Studio 2010 et ASP.NET 4, il faut soit changer la référence par défaut de System.Web.Mvc.dll créée par le projet soit ouvrir un projet créé sous 2008 et changer le target.

Dans tous les cas, il s’agit d’une pratique temporaire, la version finale de Visual Studio 2010 devrait arriver mi-avril ou un peut avant pour le MIX 2010.

 

Et si on travaillais avec les sources pour bien comprendre?

Puisqu’on a vanté les mérites d’avoir accès aux sources, pourquoi ne pas les utiliser directement comme projet de référence pour travailler au lieu de prendre la dll System.Web.Mvc.dll intégrée par défaut à votre projet?

Cela vous permettra de descendre plus loin dans le débug aussi bien pour comprendre pourquoi quelque chose ne fonctionne pas mais aussi pour comprendre pourquoi et comment cela fonctionne.

1) tout d’abord récupérez les sources citées plus haut.

2) créez une solution avec un “Empty ASP.NET MVC 2.0 Web Application” (ou tout autre projet de votre choix)

3) pour plus de simplicité collez le répertoire src des sources ASP.NET MVC dans le même répertoire que celui de la solution de votre projet puis ajoutez le projet \src\SystemWebMvc\System.Web.Mvc.csproj j à votre solution.

4) Supprimez dans votre projet les références à System.Web.Mvc (et éventuellement à Microsoft.Web.Mvc si il s’agit d’un autre projet et que vous l’utilisiez, dans ce cas il faudra aussi charger ses sources \src\MvcFutures\MvcFutures.csproj ).

5) Ajoutez dans votre projet une référence au projet System.Web.Mvc(csproj). De même pour MvcFutures si vous désirez l’utiliser

6) Supprimez toutes les références fortes à la librairie System.Web.Mvc qui se trouve dans le GAC de votre web.config:

- commentez la ligne content “add assembly=”System.Web.Mvc…” dans system.web/compilation/assemblies

- Mettez à jour le PublicToken de toutes les autres références à System.Web.Mvc à Null comme ceci:



            

            

            

            

            

      

        

- pareil pour le MvcHttpHandler qui se trouve dans system.webserver/handlers/

- ouvrez maintenant le web.config qui se trouve de votre/vos répertoire(s) Views puis effectuez le même remplacement du Token comment dans le web.config principal. par exemple:



     

       

     

   

 

Le principe est juste de lui enlever les références fortes basées sur le PublickKeyToken qui est celui du GAC pour le forcer à prendre la référence qui se trouve dans votre projet.

Lancez votre projet et vous pourrez débugger complètement votre application sans avoir un message qui vous explique qu’il ne peut rien vous dire car l’appel vient d’un process externe. Ceci arrive souvent car c’est la tuyauterie MVC qui active les classes et invoque les méthodes toute seule la plupart du temps (comme l’exécution d’une action ou la récupération des données d’un formulaire par le DefaultModelBinder…)

 

Pour Finir

Je vous invite à venir me rejoindre mardi 9 février aux Techdays pour une session de présentation sur ASP.NET MVC 2 à 17h30 que je co-animerai avec Daniel Tizon.

Bon débug et bon démarrage!

Sql: Jobs sur Sql Express

Le Contexte

Sql Server Express (2005 ou 2008) est un très bon outil pour stocker des données dans un périmètre restreint. Le fait de pouvoir embarquer une base dans une application et la monter sur une instance utilisateur à la volée est très pratique aussi. De plus depuis qu’il est livré avec un Sql Server Management Studio Express, cela devient presque un environnement de développement suffisant à la plupart des tâches.

Néanmoins, il s’agit d’un outil gratuit et par là même limité par rapport aux versions payantes de Sql Server. Même dans l’optique où l’on ne fait qu’une utilisation de stockage basique des données, il est presque irréaliste d’imaginer que l’on n’aura jamais besoin à un moment ou un autre d’effectuer des tâches récurrentes sur la base que ce soit pour des besoins métiers (comme réinitialiser des valeurs en début de mois par exemple) ou techniques (mettre en place un plan de sauvegarde). 

Sur toutes les versions de Sql Server en dehors des versions Express depuis longtemps, il y a une appli pour ça (traumatisé par Apple moi?). Il s’agit du Sql Server Agent qui est un service qui tourne en parallèle du process Sql Server et qui est dédié à la planification de tâches. Son avantage est d’être pleinement intégré à Sql Server, d’avoir accès à tout un contexte d’exécution en direct et les mécanismes de sécurité de de log qui vont avec.

Si pour vos besoins vous n’avez que Sql Server Express, il y a plusieurs moyens de contourner le problème. Voici quelques solution qui me viennent à l’esprit:

  • Lancement de commandes Sql par le biais des tâches planifiées de Windows
  • Ecriture d’un service dédié avec son propre timer, contexte,etc…
  • Mise en place de Jobs au sein même de Sql Server Express au travers du Sql Server Service Broker (qui lui fait partie de Sql Server Express…)

 

Nous allons voir ici la plus simple et la plus rapide, à savoir utiliser directement les tâches planifiées de Windows.

 

Jobs par tâches planifiées de Windows

 

Prenons un scénario simple d’une procédure de backup à réaliser toutes les nuits à 2h du matin.

 

Procédure Stockée de l’opération

Pour plus de souplesse créons une procédure stockée qui contiendra l’ensemble des tâches à accomplir:

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name='ToolBox')
	EXEC sp_executesql N'CREATE DATABASE ToolBox'
GO

USE Toolbox
GO

IF EXISTS (SELECT * FROM sys.objects WHERE object_id=OBJECT_ID('BackupDB'))
	DROP PROCEDURE BackupDB
GO

CREATE PROCEDURE BackupDB @dbname sysname --NVARCHAR(255)
AS
BEGIN
	DECLARE @DateTag NVARCHAR(32), @BackupFile NVARCHAR(255)

	SET @DateTag =	'_' + CAST(YEAR(GETDATE()) AS NVARCHAR(4)) +
					'_' + CAST(MONTH(GETDATE()) AS NVARCHAR(4)) +
					'_' + CAST(DAY(GETDATE()) AS NVARCHAR(4))

	SET @BackupFile = 'C:\Data\Backup\' + CAST(@dbname as NVARCHAR(255)) +	@DateTag + '.bak'

	BACKUP DATABASE @dbname TO DISK=@BackupFile
END
GO
--EXEC BackupDB 'mabase'

 

Il n’y a rien de particulier dans ce script qui est fait à minima pour l’exemple. Indépendamment des tâches qu’il faudrait effectuer pour sécuriser le script, nettoyer les fichiers, nettoyer la base,etc…, nous passerons quand même par une base de travail (ToolBox) pour stocker notre (nos) script(s).

 

Création du batch

Les tâches planifiées de Windows permettent bien sur de rentrer directement n’importe quelle commande, néanmoins, il est plus simple de créer au moins un petit programme de lancement sous forme de fichier .bat pour plus de souplesse (si vous avez des évolutions à faire dans vos commandes, il est plus simple de modifier ou scripter le texte du .bat qu’une commande de tâche planifiée même si celle-ci reste accessible par script)

Pour cela nous utiliserons bien sur SQLCMD qui nous permet de nous connecter à une instance Sql Server et de lancer une ou plusieurs commandes tsql par un script.

Voici donc notre commande (encore une fois à minima ;-) :

sqlcmd -S .\SQLEXPRESS -Q "exec ToolBox.dbo.BackupDB mabase" -o "C:\Data\jobs\joblog.txt"

 

Création du Job

 

Ouvrez le gestionnaire de tâches planifiées de Windows (outils d’administration dans le panneau de configuration):

image

Puis ajoutez une nouvelle tâche de base:

image

Définissez ensuite un déclancheur quotidien:

image

Définissez votre heure et la récurrence:

image

Définissez enfin l’action, il s’agit ici de démarrer un programme:

image

image

Puis sauvegardez le tout après le récapitulatif de la dernière étape du wizard.

Votre tâche est maintenant effective et disponible mais il reste un dernier détail à régler. En effet, la tâche s’enregistre avec les droits de celui qui l’a créer et par défaut ne peut s’éxécuter que si celui-ci est connecté. Nous allons donc changer cela en sélectionnant notre tâche dans la liste des tâches et en cliquant sur [propriétés]:

image

 

Sauvergardez le tout et lancez la tache manuellement pour la tester à travers le bouton Run/Lancer de la barre d’actions:

image

 

Et voila ;-)

Nous verrons une prochaine fois comment programmer le Sql Server Broker pour avoir un système entièrement intégré à notre base.

En attendant, bons Sql Express Jobs!

Le retour de la bonne année!

Cela fait un grand moment que je n’ai pas été très actif online et il est grand temps de revenir en ce début d’année. Le début d’année est une période privilégiée pour faire le point, prendre des bonnes résolutions et se projeter un peu.

Si il y a un truc que j’aime bien en cette deuxième moitié du mois de janvier, et vous n’y couperez pas, ce sont les vœux en retard. On a l’impression que tout le monde à dit ses diverses banalités et paf un zozo arrive après coup et en remet une couche (et puis d’abord jusqu’à la fin du mois de janvier c’est permis!).

Donc je vous souhaite à tous une bonne année 2010!

Mais au fait, c’est quoi une bonne année? Oui je sais, c’est idiot comme question mais au final c’est tellement vague que chacun pense à quelque chose en le souhaitant qui sera certainement très différent de celui qui l’entend…Est-ce une année où l’on fait très fort dans son travail, où l’on gagne plein de sous, où l’on a une vie perso pleine de joies? Vous m’en mettrez un peu de chaque s’il vous plait? Finalement une bonne année c’est peut être juste une année ou l’on a pas de grosses buches et c’est déjà pas si mal…

Une bonne année c’est aussi pour les geeks que nous sommes à des degrés divers et variés, une année pleine de bonnes nouvelles technologiques. Cette année par rapport à la précédente devrait être encore plus riche avec l’arrivée de Visual Studio 2010 mais surtout l’arrivée de .Net 4 et C#4. J’ajoutera à cela l’arrivée de tous les produits estampillés 2010 autour de Office ou encore Sql 2008 R2.

Mais il n’y a pas que les technos MS qui seront de la fête, tout un tas de bonnes choses sont attendues et même pourquoi pas une tablette chez Apple?

Coté web, l’année commence bien avec le jQuery nouveau qui vient d’arriver, la spec Html5 finale prévue pour la fin de l’année ou encore l’arrivée de ASP.NET MVC 2.0 pour avril (la RC1 est dispo depuis mi décembre ici)

Coté SQL, je ne m’attend pas à de grandes transformations avec 2008 R2 en ce qui me concerne même si les ajouts pour la BI sont vraiment top (j’avoue que PowerPivot m’impression un peu quand même ;-) ). Par contre coté projets, nos Challenges TSQL avancent toujours et continuent de grossir, le n°21 est actuellement en ligne jusqu’au 25 janvier. De plus vous pouvez gagner jusqu’à 100$ en proposant un challenge sur le Sql Server Challenge Idea Contest Q1, donc si vous avez des idées de défis à soumettre n’hésitez pas à participer! Si vous voulez participer au sein de l’équipe et travailler avec certains des plus grands experts Sql mondiaux faites moi signe, il y a toujours des places disponibles pour les bonnes volontés!

Bonne année et bonnes lectures!

ebook: Free Introducing Sql Server 2008

Dans la série des offres MSDN et si vous n’êtes pas abonnés à la newsletter, Microsoft Learning nous offre ce mois ci un livre d’introduction à Sql Server 2008 de Microsoft Press:

ms_sql_srv_cvr[1]

Comme d’habitude, il faut s’enregistrer pour avoir accès à l’intégralité du livre:

  • Chapter 1: Security and Administration
  • Chapter 2: Performance
  • Chapter 3: Type System
  • Chapter 4: Programmability
  • Chapter 5: Storage
  • Chapter 6: Enhancements for High Availability
  • Chapter 7: Business Intelligence Enhancements

ASP.NET MVC: MSDN Mag Juillet

Le MSDN magazine du mois de juillet est dispo.

Si j’en parle ici c’est qu’il y a notamment plusieurs articles sur ASP.NET MVC:

Bonne lecture!

DSL: Mise à jour de M

J’ai l’impression que c’est passé un peu à la trappe, mais une nouvelle CTP d’OSLO est sortie le mois dernier.

vous pouvez la télécharger ici: Oslo May 2009 CTP.

So, what’s new?
Voici quelques nouveautés en vrac car je n’ai pas encore eut le temps de m’y plonger plus sérieusement:

  • Tout d’abord “Quadrant”, un outil de modélisation graphique
  • la grammaire: apparition du ‘::’ pour déterminer plus finement le scope d’un élément dans un module (ou langue), remplacement du ‘=’ par ‘=>’ pour l’affectation des valeurs.
  • Je ne sais pas si c’est uniquement à cause de Quadrant mais le sdk passe de ~10Mo à ~40Mo…
  • Le repository: sont maintenant inclus directement plusieurs modèles pouvant être utilisés comme base de language (et accessoirement comme références) comme Language.Catalog, Microsoft.Uml2 ou System.Runtime:

Je ne sais pas si cela augure d’une nouvelle génération d’installeurs chez Microsoft mais celui-là est particulièrement beau, cela n’a rien à voir je sais mais j’aime bien ;-) .

VELOCITY
Dans la même veine, je n’ai pas eu beaucoup d’échos là-dessus mais pour ceux qui auraient encore une CTP2, la CTP 3 de Velocity est dispo: Velocity CTP3.