Category Archives: Web

Video de mon interview « Start Something » sur Windows Azure

Je me suis rendu à Paris pour enregistrer une vidéo avec Microsoft dans le cadre de la campagne « Start Something » avec Windows Azure.

Dans cette vidéo, je donne mon point de vue sur les intérêts de cette plateforme pour accélérer et simplifier de développement d’applications dans le nuage, avec une simplicité de Scaling impressionnante.

La vidéo se trouve ici.

Gérer ses environnements de développement et de production avec Windows Azure

Pour ceux qui comme moi travaillent avec Windows Azure et aiment garder la flexibilité de leur environnement de développement, staging et production, voici ma façon de travailler pour me simplifier la vie:

Web.config transformations:

Depuis Visual Studio 2010, l’on peut utiliser des transformations XML du fichier web.config, afin d’obtenir des versions différentes de la solution Web que l’on soit en Debug ou en Release.

Exemple simple de gestion du SessionState:

Dans le fichier Web.Debug.config:

<sessionState xdt:Transform="Replace" mode="InProc" />

Dans le fichier Web.Release.config:

<sessionState xdt:Transform="Replace"
mode="SQLServer" allowCustomSqlDatabase="true"
sqlConnectionString="Server=tcp:mysqlserver.database.windows.net;Database=MyDB;User ID=admin;Password=password;Trusted_Connection=False;Encrypt=True; MultipleActiveResultSets=True;" />

On peut aussi faire la même chose avec la connection à la base de données utiliser par Entity Framework:

Dans ce cas juste un petit changement; le fichier Web.Debug.config ne contiendra pas la connection SQL, mais ce sera le fichier principal Web.config.

En effet, les transformations ne s’appliquent que lors de la publication du projet. Il vaut mieux garder ces valeurs dans le Web.config pour pouvoir débugger en local  !! :)

Dans le fichier Web.config:

<add name="RMOPEntities" connectionString="metadata=res://*/Data.RMOP.csdl|res://*/Data.RMOP.ssdl|res://*/Data.RMOP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=ariel.ctp-int.com\galatea;initial catalog=RMOP;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Dans le fichier Web.Release.config (pour transformer l’entrée pour le package Azure à déployer):

<add name="RMOPEntities"
connectionString="metadata=res://*/Data.RMOP.csdl|res://*/Data.RMOP.ssdl|res://*/Data.RMOP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=wyopqjbi6s.database.windows.net;initial catalog=RMOP;;User ID=ctpadmin;Password=pass@word1;multipleactiveresultsets=True;App=EntityFramework&quot;"
providerName="System.Data.EntityClient" />

Conditional Symbols utilisé à la compilation:

vous connaissez surement la notation « #if DEBUG » pour ne compiler une portion de code que si le symbole « DEBUG » est défimi sur le projet.

Vous pouvez aussi créer vos propres symboles puis les utiliser dans votre code.

Exemple de définition ci-dessous dans votre projet:

Dans ce cas, j’utilise ce symbole pour pouvoir bypasser la section de long pour tester mon application.

Vérifier si vous êtes VRAIMENT sur Azure:

Dans certains cas, on n’a pas forcément besoin d’exécuter la totalité du projet, même dans la DevFabric.

Pour éviter cela, on peut alors débugger son application en tant que Web App standard et retourner des « Dummy Data » pour tester son application plus rapidement.

Un exemple simple ici:

if (RoleEnvironment.IsAvailable)
{
    return AzureBlobMaganer.GetDataItems();
}
else
{
    return new List<DataItem>() {new DataItem() {Label = "Test", Value = 12}};
}

Config Items in Roles:

Le dernier point ici est d’utiliser le contexte dans lequel est l’application pour pouvoir récupérer la connexion au Azure Storage qui correspond : DevFavric ou Azure ?

Voici un exemple des entrées dans un fichier de Service Configuration:

La solution la plus Simple est:

#if DEBUG
var account = CloudStorageAccount.FromConfigurationSetting("StorageDev");
#else
var account = CloudStorageAccount.FromConfigurationSetting("Storage");
#endif

Une solution plus élégante serait d’encapsuler cela dans une mèthode pour récupérer le Sorage Account correspondant.

Merci de votre lecture, et n’hésitez pas à me laisser un commentaire :)

Entity Framework côté performance

Voivi un post portant sur quelques unes de mes trouvailles autour de la problématique de performance pour Entity Framework.

Il y a ici un très bon article sur Technet que vous ne devez pas manquer pour ce qui est de l’optimisation d’EF.

Il y pas mal de bons points dans cette article, mais voici ceux qui sont pour moi ceux qui donnent un bon retour sur investissement :) :

  1. Utilisez des requêtes LINQ compilées : compiler vos requêtes LINQ va permettre à celles -ci d’être évaluées une seule fois au run-time au lieu d’être évaluée a chaque fois qu’elle sera exécutée ; Cela va permettre à vos requêtes d’obtenir des performance très proches de celles que l’on obtiendrait alors en ADO.NET avec un DataReader :) . Autre avantage, celles-ci peuvent se compiler en prenant un ou plusieurs paramètres.
  2. Vues pré-générées : une fois votre modèle fixé, vous allez pouvoir générer des vues sur lesquelles se base EF pour requêter la base données ; le fait de le faire va lui éviter de regarder en base pour « guesser » les façons de requêter.
  3. NoTracking merge option pour les requêtes : si vous ne prévoyer pas de faire de modification sur certains objets que vous requêtez, pensez à utiliser le NoTracking lors de la requête, cela évite a EF de garder des versions temporaire de vos objets au cas où vous il il aurait besoin de les comparer pour une modification.

En espérant que cela vous aide, à bientôt !

jQuery Templates et le Data Linking

Pour ceux qui connaissaient la notion de Binding introduite par .NET à ses débuts avec le Databinding de Winforms et celui d’ASP.NET, se sont demandés quand les nouveautés introduites par WPF avec son Dual Way Binding allaient arriver pour le développment web…

N’attendez plus! Le templating jQuery qui permettait déjà de lier des données d’objets Javascript avec des objets de l’arbre HTML vient d’être complété par un plugin jQuery nommé Data Linking. L’avantage de cette solution est de pouvoir lier un objet métier Javascript avec des contrôles web.

Le gain d’une telle technologie va dans le sens de la création d’une appli web, non plus comme une série de rendus HTML générés côté serveur, mais comme une liste de services (WCF dans le cas de Microsoft) appelés par des pages HTML basiques sans aucun rendu serveur, un peu comme un applicatif Client-Serveur classique, mais en Web !!

Le point intéressant est aussi que Microsoft a développé ce plugin et l’a poussé sur la plateforme jQuery :)

Un article très intéressant (avec exemples) est à trouver sur le site de Scott Guthrie.

Messieurs à vos Notepads !!!

Internet Explorer 9 preview

Deuxième jour du MIX à Las Vegas pour Microsoft (avec l’annonce le 1er jour de Windows Phone 7 development Toolkit et de Silverlight 4 RC), et l’annonce de la preview de Internet Explorer 9, avec des nouvelles sympas pour nos amis les développeurs webs, jugez-en par vous-même avec ce tableau:

Pour ce qui est le l’Acid Test 3, cette preview s’en sort honorabelment par rapport à son prédécesseur avec un score de 55%.

A télécharger ici, s’intalle snas avoir à redémarrer sa machine ;)

Contrôles Ajax et Javascript pour vos projets Web

Sur Ajaxrain.com, vous trouverez une liste conséquente de contrôles Javascript, basés sur pas mal de frameworks Javascript comme Mootools, JQuery, Scriptaculous ou encore Prototype ; vous trouverez aussi bien des contrôles uniquement Javascript que des contrôles directement liés à une technologie (ASP.NET, Php…)

Tous les contrôles référencés sont aussi tagués pour permettre une rechercher précise du type de contrôle que l’on recherche, très utile !