Petit aperçu de l’extensibilité de Visual Studio 2010 en une image

5 février 2010

Il y a un peu près un an j’écrivais sur mon blog trois articles sur l’extensibilité de Visual Studio 2008 :

Quelques jours après je poursuivez sur une introduction à MEF : Managed Extensibility Framework.

Le rapport ? Et bien mélangez les deux et vous aurez le nouveau modèle d’extensibilité de Visual Studio 2010 :) En ajoutant aussi que le nouvel éditeur de code en WPF (où l’on appréciera grandement le Zoom-In/Out lors de présentation), nous apporte des tas de possibilité en matière d’extension.

Jugez par vous même! Aurait-on pu avoir ce genre de comportement dans les versions antérieures ?

image

image 

Un petit “add-in” qui remplace les chaines de caractères “wygwam” et “microsoft” par leurs logos respectifs ! Oui je sais cet add-in est inutile mais il montre bien les possibilités apportés “je fais ce que je veux où je veux…. Et en WPF” ;)

Un petit article de présentation arrivera prochainement, en attendant retour en mode préparation des TechDays ;)

Windows Azure SDK 1.1 et le nouveau service Azure Drive

2 février 2010

Microsoft vient de publier la nouvelle version du SDK pour Windows Azure, version 1.1 de Février 2010 que vous pouvez retrouver sur :

Hormis la correction de quelques bugs de la version 1.0 (Novembre 2009) notamment avec le StorageClient ou l’API Diagnostics (prochainement abordé dans le Coach Azure MSDN), cette nouvelle version apporte deux nouveautés non-négligeable :

  • Le “OS Version Support
  • Un nouveau service des Azure Storage : le Azure Drive

OS Version Support

Le “OS Version Support” est un attribut (nommé “osVersion”) que l’on va placer sur notre ServiceConfiguration.cscfg (fichier de configuration de notre service Azure) pour définir quelle est la version de l’OS qui va exécuter notre application, on appelle cela le ‘”Guest OS”.

Pourquoi ? Tout simplement pour éviter les problèmes de changement/mise à jour des machines virtuelles qui exécutent mon application.

Ainsi une application écrite avec la version 1.0 du SDK pourra choisir de s’exécuter sur la version Windows Azure Guest OS 1.0 (Release 200912-01) ou sur la Windows Azure Guest OS 1.1 (Release 201001-01). Par contre une application écrite avec la version 1.1 du SDK Azure tournera forcement sur la Windows Azure Guest OS 1.1 (Release 201001-01).

On a donc le choix entre le Windows Azure Guest OS 1.1 défini par la clé WA-GUEST-OS-1.1_201001-01 et l’ancien Windows Azure Guest OS 1.0 défini par la clé WA-GUEST-OS-1.0_200912-01. Ainsi, bien que Microsoft continura d’e faire évoluer les Guest OS, mon application pourra continuer de fonctionner dans la version pour laquelle elle a était écrite sans problème d’upgrade.

Par exemple pour que mon service fonctionne sur la version 1.1, le début de mon fichier de configuration ressemblera à cela :

1
2
3
<ServiceConfiguration serviceName="CloudService1" osVersion="WA-GUEST-OS-1.1_201001-01" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole1">
	....

Azure Drive

Annoncé en Novembre 2009 lors de la PDC09, le service Azure Drive (anciennement XDrive) permet de “monter” le service des Azure Blobs comme une partition NTFS (ex: X:\) sur le service Compute de Windows Azure. Si ces notions ne vous sont pas familières je vous invite à parcourir notre coach Azure sur la MSDN ainsi que notre Azure Roadshow. Ce service n’est disponible que dans un rôle (web ou worker) Windows Azure en version 1.1 (voir OS Version ci-dessus).

Derrière cela se cache en fait le service des Azure Blobs qui va stocker un disque dur virtuel VHD. Ce VHD utilise le Azure Blob Page Blob introduit en Novembre 2009 et non le classique Block Blob. Vous retrouverez sur notre Azure Roadshow à la slide 67 les différences majeures entre les Blocks et Pages blob.

Le VHD doit être partitionné en NTFS et vous avez ensuite la possibilité de pouvoir uploader/downloader vos propres VHD en utilisant le service des Blobs. Comme l’indique la slide 67 de notre Azure Roadshow, votre VHD ne pourra excéder 1 To (limite d’un Page Blob). De plus chaque VM peut monter jusqu’à 16 “Drives”.

Côté “prix”, vous payerez l’utilisation du service des Azure Storage à savoir $0.15 par GB et $0.01 toutes les 10000 transactions dans le forfait “Consumption” (voir le détail ici).

On pourrait alors se demander comment connaitre le nombre de transaction effectué lorsque j’accède au contenu de mon VHD stocké dans un PageBlob ? C’est pourra cela qu’on utilise un ”local-cache” grâce aux “Local Storage” du service de Compute de Windows Azure.

Vous définissez ainsi un LocaStorage à utiliser sur votre VM (voir le Coach MSDN pour mieux comprendre le LocalStorage – en résumé c’est un espace de stockage NTFS local à la VM qui est réinitialisé à chaque démarrage de la VM) par les lignes :

1
2
3
4
5
<LocalResources>
      <LocalStorage name="MyAzureDriveCache" 
                    cleanOnRoleRecycle="false" 
                    sizeInMB="220000" />
</LocalResources>

Votre LocalStorage pourra être accessible sur la lettre Z:\ dans votre VM Azure.  La taille du LocalStorage dépend de la taille de votre VM. Sur une Small instance on dispose de 250Gb, sur une Extra large instance on a 2Tb (voir le détail ici).

Il faudra ensuitre initialiser votre LocalStorage pour qu’il remplisse son role de “cache” pour les Drives par la ligne :

1
2
CloudDrive.InitializeCache(localCache.RootPath, 
              localCache.MaximumSizeInMegabytes);

Et pour finir vous pourrez monter votre “drive” sur votre LocalStorage par le code :

1
2
3
CloudDrive drive1 =  
    new CloudDrive(new Uri(“http://account.blob.core.windows.net/container/Blob1”), credentials);
drive1.Mount(200000, DriveMountOptions.None);

En clair, ce service va nous permettre de manipuler nos dossiers/fichiers comme nous le faisions On-Premise sur nos Windows Server sans devoir réécrire nos applications existantes. Derrière cela tout repose sur les PageBlob nous garantissant une disponibilité de 99,99% et failover automatique.

Plus d’informations :

Retrouvez-moi en conférence aux TechDays 2010 le 8, 9 et 10 Février

2 février 2010

Plus que quelques jours avant la 4ème édition des TechDays 2010 qui se déroule le 8, 9 et 10 février 2010 au Palais des Congrès de Paris.  

TechDays2010_Signature_Email

Pour rappel les TechDays c’est :

  • 3 grandes conférences plénières
  • Plus de 300 conférences techniques
  • Des workshops animés par des experts sur des thématiques variées
  • Une zone d’exposition regroupant près de 130 partenaires, stands Microsoft et communautaires
  • Un espace dédié pour échanger avec des experts

Pour ma part vous me retrouverez lors de deux sessions :

  • Le Mardi 9/02 – 13:00 – 14:00 – Nouveautés de Visual Basic 2010 et les trucs et astuces de son IDE (co-animé avec Gregory Renard)
  • Le Mercredi 10/02 – 16:00 – 17:00 – SQL Azure & Azure Storage (co-animé avec Pascal Belaud)

Ainsi que différents Workshops sur Windows Azure que je donnerai avec Guillaume Belmas et Ronny Kwon :

  • Le Lundi 8/02 – 14:30 – 15:30 – Développer pour Windows Azure
  • Le Lundi 8/02 – 17:30 – 18:30 – Développer pour Windows Azure
  • Le Mardi 9/02 – 14:30 – 15:30 – Développer pour Windows Azure
  • Le Mardi 9/02 – 17:30 – 18:30 – Développer pour Windows Azure
  • Le Mecredi 10/02 – 14:30 – 15:30 – Développer pour Windows Azure

Mon programme complet : http://www.microsoft.com/france/mstechdays/programmes/parcours.aspx?SpkID=ea05b0cd-6e8e-45f2-8609-4da9588d3501

Vignette_Speaker_H

Wordpress, Windows Live Writer et son Invalid response document returned from XmlRpc server

2 février 2010

Cela fait plus d’une dizaine de jours que je suis privé de mon Windows Live Writer pour composer mes posts de blog. Cela devient très problématique pour le confort d’utilisation qu’apporte WLW surtout en ce qui concerne la gestion des images entre autre…

En cause, une erreur levée par WLW m’indiquant :

An error occurred while attempting to connect to your blog:

Invalid Server Response – The reponse to the blogger.getUsersBlogs method received from the blog server was invalid:

Invalid response document returned from XmlRpc server

You must correct this error before proceeding.

Pour information, mon blog (un Wordpress actuellement en version 2.9.1) est hébergé sur un Windows 2003 avec donc un IIS6, le module de FastCGI avec un PHP 4.4.6, le tout derrière un reverse proxy Apache 2. Vous retrouverez déjà sur Internet plusieurs article à ce sujet, mais aucun n’a résolu mon problème. (http://codex.wordpress.org/Windows_Live_Writer_Help).

Après avoir éliminé le cas d’une erreur coté client (mon WLW marche bien avec d’autre blog) et d’une erreur de mon environnement Win/IIS par le fait qu’un autre blog Wordpress 2.9.1 sur ce même serveur fonctionne très bien avec WLW, je me suis intéressé à la différence dans les échanges HTTP entre le blog qui fonctionne et mon blog qui ne fonctionne pas avec WLW.

Pour cela je me suis servi de Fiddler pour filtrer les échanges HTTP de WLW avec les blogs en question. Voici le début du process d’ajout d’un compte dans WLW :

  1. Téléchargement de la page d’accueil du blog pour récupérer l’URL du “EditURI”
  2. GET sur le /xmlrpc.php?rsd pour récupérer l’URL de l’API (qui doit être /xmlrpc.php)
  3. POST sur le /xmlrpc.php
  4. ….

Seulement l’erreur de WLW est lévée à l’étape 3. D’ailleurs Fiddler nous indique une violation du protocole HTTP :

Fiddler has detected a protocol violation in session #51. Content-Length mismatch: Response Header claimed 647 bytes, but server sent 650 bytes.

image

Il y a en effet 3 octets en plus dans le contenu de la réponse que dans ce qui est déclaré dans le header HTTP. En regardant le plus près, ces trois octets sont présents juste au début du contenu de la réponse HTTP et juste après le header : EF BB BF !

image

Suivant Wikipédia : “La représentation UTF-8 du BOM est la séquence d’octets EF BB BF, qui apparaît en codage ISO-8859-1 comme ""”.

On peut facilement reproduire ce comportement en créant deux pages PHP faisant un simple echo. Sur une des pages on enregistre en “ANSI” et sur l’autre en “UTF8”. En appelant ces deux pages, on constatera avec Fiddler que le fameux “EF BB BF” est ajouté sur la page encodée en UTF-8.

Sachant cela, je me suis intéressé à la possibilité qu’un fichier PHP inclut dans ma réponse était encodé en UTF8. Et cela était le cas mais à un endroit où on l’attend pas : dans mon thème Wordpress.

Ainsi si vous avez cette erreur, vérifiez tous vos plugins et surtout votre thème. Désactivez tout, il y a de très grandes chances que cela provient d’un fichier ayant un mauvais encodage. Vous éviterez de perdre de longues heures pour tenter de comprendre ce problème :)

Mais où est donc passé le Live Service Developer Portal ?

2 février 2010

En voulant mettre en place une authentification LiveId pour une application Web, je me suis demandé où était passé le “Live Service Developer Portal” nous permettant de déclarer nos applications.

En effet depuis la PDC09, la section “Live Services” a disparu du portail “Windows Azure” nous mettant maintenant à disposition les services Windows Azure (Compute et Storage), SQL Azure, AppFabric (ex. .NET Services) et enfin le Marketplace :

image

Il faut chercher un peu car il n’y a aucun lien sur le site des Live Services (http://dev.live.com/) ni sur les blogs et/ou forums associés, en fait on retrouve le fameux lien dans la documentation MSDN sur la page “Getting Your Application ID….” ! L’adresse est donc : https://live.azure.com !

azure

Ce qui est assez étonnant c’est que ce portail n’est plus tellement à jour à y regarder le menu, on y retrouve les “.NET Services” à la place du nouveau  “AppFabric”. De plus, “Live Services” a disparu au profit du “Marketplace”.

Quoi qu’il en soit vous pourrez toujours gérer vos applications afin d’y intégrer l’authentification Live Id .

helpaged

Seulement vous risquez de rencontrer souvent ce type d’erreur, une “PipeException” :

errorlive

Visiblement le “Live Services Developer Portal” semble être en pleine “restructuration” après le lancement officielle de la plateforme Windows Azure. Wait & see….