mardi 10 novembre 2009

ASP.NET

Petite astuce ASP.NET ... rien de transcendant mais, plutot utile !

Si vous utilisez une page dans laquelle il y a des "updatePanel" et que vous devez exécuter du code javascript avant l'appel ajax /et/ou après l'appel ajax, vous pouvez utiliser le PageRequestManager.

code javascript :

var pageManager = Sys.WebForms.PageRequestManager.getInstance();
pageManager.add_beginRequest(function(sender,args){
MasterPage.DisplayWaitPanel(); // affiche un hypothétique écran d'attente
return true;
});

pageManager.add_endRequest(function(sender,args){
MasterPage.HideWaitPanel(); // cache l'hypothétique écran d'attente
return true;
});

du coup le wait panel est affiché quel que soit l'action provenant de l'updatePanel !

Windows Seven Preview Panel

Ptit post bien pratique...

Dans l'explorateur de Windows Seven, il est possible d'afficher le contenu des fichier dans le panneau de droite, sans les ouvrir explicitement.

Pour ce faire, il est indispensable qu'une clé de registre existe en face de l'extension de fichier, pour indiquer au système comment interpréter l'aperçu du fichier.

Clé registre :
HKLM \ Software \ Classes \.[extentionFichier]
Vérifier l'existance / ajouter la clé (string) PerceivedType avec pour valeur text.


:)

jeudi 5 novembre 2009

Design Pattern

Salut à toi lecteur !

Un petit post sur un coup de coeur que j'ai eu (en fait je me suis fait plaisir avant Noel ;) )

Je suis un adepte du site DoFactory (http://www.dofactory.com) qui présente des design patterns, mais surtout qui vend un kit à +/- 54€ (79$), soit le prix d'un bon livre....

Ce kit comprend :
- Livre (pdf) des patterns du GOF (Gang Of Four - dieux du pattern),
- Livre (pdf) Head First in Design Patterns (à l'époque, je l'avais acheté en francais, et c'est une référence en la matière !), qui présente les DP avec beaucoup de pédagogie et d'humour,
- Livre (pdf) Patterns in Actions,

Ainsi que les exemples de ces livres !
Chaque exemple est traité de trois manière :
- Exemple du pattern théorique,
- Exemple réel du pattern
- Exemple réel du pattern optimisé pour .NET 3.5 (VB ou C# suivant le kit)

Bref une bible à avoir !

@+

mardi 20 octobre 2009

Javascript, UpdatePanel et Wait animations

Lorsque l'on utilise des Updatepanel ASP.NET, il est tout a fait possible de les agrémenter de traitements javascript appelés avant / après l'appel du code behind par ajax.
Cela peut être utile (par exemple) pour afficher ou masquer une animation pendant le traitement.

Pour ce faire, il "suffit" (en javascript) d'insufler à l'objet PageRequestManager les fonctions javascript à exécuter en pré/post traitement.

Exemple : (coté aspx)
{script language="javascript" }

var pageManager = Sys.WebForms.PageRequestManager.getInstance();

pageManager.add_beginRequest(function(sender,args){
MasterPageJsMgr.DisplayWaitPanel();
return true;
});

pageManager.add_endRequest(function(sender,args){
MasterPageJsMgr.HideWaitPanel();
return true;
});

{/script}

L'objet MasterPageJsMgr correspondant à un objet JSON (Javascript Object Notation)
définit quelque part et permettant d'afficher ou de masquer une WaitForm.

@+

mercredi 19 août 2009

Xaml, Enumeration et intellisense !

Un petit post bien sympa pour se faciliter la vie...

Lorsque nous construisons des contrôles graphiques (exemple : librairie de contrôles), il arrive que nous utilisions des propriétés qui retournent des membres d'énumération.

Lorsque l'on vient à déclarer ces contrôles dans un fichier xaml, et que l'on appelle la propriété en question pour lui affecter une valeur ...
rien ne se passe : l'intellisense est dans les choux !

Pour corriger cet "intelli-ignorance", il suffit d'appliquer un geste très simple :

1. déclarer le namespace dans le fichier AssemblyInfo.cs de la façon suivante :
[assembly: XmlnsDefinition("http://monTruxAMoi.com/wpf/", "nameSpaceDeLenumeration")]

XmlnsDefinition provient de System.Windows.Markup.

2. Je compile,

3. Enfin, dans le Xaml ou je désire utiliser mon contrôle, j'ajoute une déclaration xmlns:monTrux="http://monTruxAMoi.com/wpf/"

Hélas cela ne fonctionne "correctement" qu'en WPF ...
En Silverlight (même 3), Visual Studio ne résoud pas correctement les using dans les fichiers xxx.g.cs
du coup, on perd l'intellisense côté C# ... pas pratique !

mercredi 12 août 2009

Silverligh 3 : Fichiers de Styles

Une nouveauté intéressante de SL3 est la possibilité de sortir les styles utilisés du fichier App.xaml pour les placer dans des fichiers propre (exemple : Style.xaml).

Pour ce faire, créez un fichier de type Dictionnaire de ressource,
Et ensuite, dans le fichier App.xaml, ajouter les lignes suivantes :

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Assets/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>


Cela aura pour effet de fusionner la liste des fichiers indiqués par la source comme étant des ressources de l'application (utilisable donc par les appels "StaticResource").

@+

vendredi 10 juillet 2009

Silverlight 3 !

Nous y sommes !

La version finale de Microsoft Silverlight 3 a été publiée ce vendredi !
A nous le mode Offline, la 3D, le streaming HD, le framework RIA !

Bref que de bonnes nouvelles ...
De là a combiner cela au Cloud Azure...

May the force be with you !
@+

PS : La chaine NBC a annoncé couvrir la diffusion des JO d'hivers de Vancouver en HD (720p) par une plateforme Silverlight 3 !
(Ce qui a été réalisé pour Roland Garros 2009)

lundi 22 juin 2009

Silverlight et WCF ... pour être propre !

L'utilisation d'un canal de communication WCF par une appli silverlight nécessite un appel asynchrone, et donc, l'abonnement à l'évènement blablablaComplete.

Lors de l'appel de la méthode blablabla, nous pouvons passer en paramètre l'objet proxy afin d'effectuer des opérations de nettoyage (pour être plus propre) :
CloseAsync( ) et le désabonnement à l'évènement.

Exemple :




// méthode sur l'évènement complete (sous la forme d'une expression lambda)
EventHandler
methodComplete = null;

// Proxy pour l'appel WCF
SrvDatasClient proxy = AppDataHelper.GetProxy();

// définition de la méthode lambda
methodComplete = (ssender, ee) =>
{

// traitement du retour

//ee.UserState contient le proxy
(ee.UserState as SrvDatasClient).SaveCompleted -= methodComplete; // plus propre
(ee.UserState as SrvDatasClient).CloseAsync(); // super plus propre


};

proxy.GetAllCompleted += methodComplete;
proxy.GetAllAsync(proxy); // appel ou je passe en param le proxy



C'est toujours plus propre de fermer ce que l'on utilise ...

lundi 15 juin 2009

Silverlight 2 et URL

En Silverlight 2 (comme en WPF d'ailleurs), il est fortement conseillé de créer des styles, et de mapper ces derniers aux composants concernés (via leur balise style et le mécanisme de resource statiques).

Dès lors, ces styles sont créés soit dans les ressources du usercontrol concerné, soit dans les ressources de l'application (App.xaml)

Dans le cas d'images (incorporée dans l'assembly comme ressource) il est d'usage d'utiliser les url's absolues pour permettre la récupération des images, quel que soit le niveau du sous namespace, ou sous répertoire du xaml du user control concerné.

Ce chemin se présente de la sorte :

/nomDeLAssembly;component/blablabla

où blablabla correspond au chemin de l'image.
Si le chemin de l'image dans le projet est Images/toto.png
mon chemin sera :
/nomDeLAssembly;component/Images/toto.png

@+

Silverlight 2, WCF et les FaultException

Lorsque une équipe travaille en Silverlight, il est nécessaire de communiquer avec un proxy (serveur) pour disposer de données et interagir avec elles.
Pour se faire, nous pouvons utiliser les objets WebRequest ou WebClient (tuto : http://bdevuyst.developpez.com/tutoriels/silverlight/S2-interagir-avec-son-serveur/).

Nous pouvons également utiliser WCF (Windows Communication Fundation). Pour rappel, cette technologie permet de ne maitriser qu'une seule syntaxe (en C#, par exemple), et un fichier de paramètres permettra à WCF de savoir quel est le protocole à utiliser pour les échanges (WebService, NetPipes, ...).

Lorsque l'on manipule du WCF, les exceptions rencontrées sur le serveur peuvent être transférées au client grâce à la classe FaultException (Il s'agit d'une Exception qui peut être sérialisée vers un client).
Tout autre Exception (dérivant de System.Exception) se voit arrêtée par WCF côté serveur.
En effet, pour des raison de sécurité, une System.Exception ne peut traverser WCF.
(Elle contient trop d'informations sur l'architecture de l'application - stacktrace par exemple).

Suite à un souci (l'explication est à trouver ici : msdn), ces erreurs ne peuvent être remontées vers le client Silverlight 2 (ce sera peut être le cas en version 3).

Dès lors, pour pouvoir gérer, côté Silverlight, les exceptions éventuelles de l'application serveur, il faut être un petit peu sioux !

Voici le lien d'une solution Visual Studio 2008, proposant une réponse à ce problème :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip

Globalement, voici le mécanisme :

La solution est divisée en 3 projets :
- Le projet Web qui héberge l'application Silverlight et un Service WCF (.svc),
- Le projet Silverlight,
- Un projet bibliothèque de classe qui "simule" une autre couche, qu'utilise le Service WCF,

  1. L'application Silverlight appelle le point de terminaison WCF, (derrière le bouton),
  2. L'application WCF traite la demande, cherche à obtenir les données, et une exception se produit... (pas de chance ;) )
  3. La couche WCF catch l'exception, et retourne un objet d'un type particulier
  4. Cet objet retourné est la clé du mécanisme

Il s'agit d'une classe générique qui contient 3 propriétés :
  • Message : Correspond au message de l'exception générée, vide si le traitement s'est bien passé,
  • StackTrace : Pour le debug (dans le cas de symbole de debuggage absent, ce champ est vide)
  • ObjetAttendu dont le type est précisé lors de la déclaration de la variable. Cette dernière contiendra l'objet attendu si aucune exception ne s'est produite pour le récupérer.
L'application Silverlight récupère alors un objet qui contient les trois propriétés, et peut donc déterminer si une exception s'est produite, et si un résultat est exploitable.

Je vous invite à télécharger les sources pour bien saisir le mécanisme...
Lien des source de la solution Visual Studio 2008 :
ftp://ftp-developpez.com/bdevuyst/tutoriels/silverlight/S2-gestion-exception-wcf/SilverlightApplicationGstException.zip

@+

jeudi 14 mai 2009

Nouveautés Silverlight 3

Silverlight continue de grandir : à l'occasion du Mix 2009 à Las Vegas, Microsoft a levé le voile sur les nouveautés SL3.

Voici une liste non exhaustive :

- Héritage des styles (comme en WPF)

- Effets graphiques 3D (ombres, projections 3D, ...)

- Création d'applications Offline, avec un loader d'application Silverlight qui gère la mise à jour automatique de l'instance Offline à partir de l'Online,

- Gestion de la HD pour les vidéos

Pour une description plus complète :

@+

lundi 23 mars 2009

Books - Apress "Pro Silverlight 2 in C#"

I have bought a e-book about Silverlight 2 and... its one of the best one I have read about this RUI (Rich User Interface) / RUE (Rich User Experience) technology.

If you're looking for that kind of book ... this one is also for you !

URL to the book : http://www.apress.com/book/view/1590599497

@+

vendredi 20 mars 2009

Bonne nouvelle !

Il y a quelque temps, le petit monde de l'informatique francophone constatait avec désarroi la "mort" d'un grand éditeur : Oreilly France.
En effet, pour des questions de rentabilité, la maison mère pris cette lourde décision.
Depuis, de grandes interrogations demeuraient quant à la continuité d'accès aux livres... ne fut ce qu’en format électronique.
C’est chose faite : l’éditeur Immatériel (http://librairie.immateriel.fr/) vend depuis peu les précieux ouvrages.

Profitez-en !

@ce propos, n’hésitez surtout pas à investir dans une des bibles des design patterns : « Tête la première dans les design patterns ». (Livre GENIAL !!!)

lundi 16 mars 2009

Nouveau tutorial : Créer ses propres classes génériques

Just for pleasure : je viens de pondre un ptit tuto pour éclaircir la question des classes génériques,

Le framework .NET en propose toute une panoplie.
L'exemple le plus connu est probablement les List qui permettent de créer des listes fortement typées.

Ce mécanisme est puissant, et nous pouvons nous aussi définir des classes génériques dans nos développements.

Mais qu'est ce qu'une classe générique ?

Pour ceux que cela intéresse :
http://bdevuyst.developpez.com/tutoriels/dotnet/creer-ses-propres-classes-generiques/

Enjoy !

vendredi 13 mars 2009

Silverlight : 2 Major evolutions !

One step behind in Silverlight Open World :

A new version of Moonlight (Silverlight for Linux World) has been released, it support all Silverlight 1 behaviours. The Silverlight 2 version will be released on Sept 2009, but it is available in pre alpha version for testing... an more !
http://www.mono-project.com/Moonlight

Silverlight 2 Microsoft controls code has just been published. It is under Microsoft Public License, and can be download here : http://www.microsoft.com/downloads/details.aspx?FamilyID=EB83ED4C-AC85-4DE9-8395-285628EE2254&displaylang=en

Enjoy

jeudi 12 mars 2009

Principes de securité SQL Server

Deux post sur la semaine !
A mon avis, là on est largement au delà de ce que je ferai dans l'avenir (j'espère 1 post -sérieux- par semaine, ou minimum par mois)...

Ce post vise à simplement re parler d'un tuto SQL Server que j'ai écris en aout 2007.
(modeste tuto)
En voici le résumé... et le lien (dans un avenir proche, je placerai un lien vers un pdf ici !)

SQL Server 2005 adopte une sécurité à deux niveaux : Moteur et base de données.
Que sont les schémas, rôles, rôles de serveur fixe, peut on intégrer la sécurité Active Directory à SQL Server,...
Ce tutorial est une synthèse de la gestion des droits du moteur de bases de données.

http://sqlserver.developpez.com/temp/secu/


@pluche !

mercredi 11 mars 2009

Visual Studio + Attach to process + Compact Framework = ...

Pour ce premier billet, juste une petite astuce ...

Dans Visual Studio 2005 (2008), nous avons la possibilité d'attacher dynamiquement (à chaud) une application IL (.NET) qui s'exécute au code source afin de l'exécuter en pas à pas.
En général, c'est ce que l'on fait pour débugger des service Windows, des services WCF ou des WebServices.

L'autre jour, j'ai été confronté à la nécessité de faire cela mais avec une application Windows CE (mobile) en Compact Framework...
Et là c'est le drame, car par défaut, Windows CE ne permet pas cette fonctionnalité !

Voici le résumé des opérations à faire pour permettre d'attacher dynamiquement une application en cours d'exécution sous Windows CE avec son code source en VS.NET.

1. Modification du registre du périphérique mobile
A VOS RISQUES ET PÉRILS !
  1. Parmis les outils livrés avec Microsoft Visual Studio, se trouve le "Remote Registry Editor"
    (Menu démarrer, Tous les programmes, Visual Studio 2005, Visual Studio Remote Tools
    Démarrez le...
  2. Sélectionnez le périphérique à connecter, et validez
    (Si l'écran de sélection n'est pas ouvert : cliquez sur Target, Connect)
  3. Ouvrez :
    "HKEY_LOCAL_MACHINE" \ "SOFTWARE" \ "Microsoft" \ ".NETCompactFramework"
  4. Dans cette clé, ouvrez "Managed Debugger"
    • Si ce dernier n'existe pas, créez le !
      Bouton droit de la souris sur ".NETCompactFramework", Nouvelle clé,
      Saisissez "Managed Debugger" (attention à la casse), et validez,
  5. Dans "Managed Debugger", Modifiez la valeur DWORD "AttachEnabled" à 1,
    • Si la valeur n'existe pas, créez là !
      Bouton droit de la souris sur "Managed Debugger", Nouvelle valeur DWORD,
      Saisissez "AttachEnabled" pour le nom, et 1 pour la valeur,
2. Attach to process !
Dans Visual Studio, ouvrez le menu Déboguez, Attachez au processus,
Choisissez "Transport : SmartDevice",
et choississez le périphérique dans "Qualificateur",

Choisissez le process, et Validez !

Pour désactiver la fonctionnalité, il suffit de saisir 0 comme valeur pour "AttachEnabled".

Par défaut cette fonctionnalité est désactivée, pour une question de performance.

@+

Accessible aussi à ce lien :
http://www.codes-sources.com/tutoriaux/VISUAL-STUDIO-COMPACT-FRAMEWORK-ATTACH-TO-PROCESS_951.aspx