Hayadi's Blog

dimanche, juin 22, 2008

DataBinding autour de Silverlight

Besoin de monter un exemple de DataBinding avec du Silverlight ?

Un trés bon tutorial avec du code source téléchargeable sur l'URL suivant : http://silverlight.net/learn/tutorials/databinding.aspx


Y'en a également d'autres cas pratique et exemples d'impémentation sur l'url suivante : http://silverlight.net/learn/tutorials.aspx

jeudi, janvier 25, 2007

Gestion des erreurs et des exceptions


Vos programmes doivent toujours être capable de traiter les erreurs et ceci afin d''en permettre une utilisation plus confortable.
Imaginez un programme ne traitant pas les erreurs : au moindre petit problème non prévu par le programmeur, le programme planterait, les données seraient très certainement perdues et vous n''auriez plus qu''à le relancer et à tout reprendre...Par exemple, un programme qui demande à l''utilisateur de choisir un fichier afin d''en modifier quelques données. Si l''utilisateur choisit un fichier protégé en écriture et que votre application n''est pas en mesure de gérer ce cas là... c''est le drame et il faut tout refaire...
Heureusement, C# offre des possibilités sophistiquées pour traiter ce type de problème : il s''agit du mécanisme de gestion des exceptions.

1 Capture et levée d''exceptions
1.1 Capture d''exceptions

Pour capturer des exceptions, il faut utiliser les blocs try, catch et finally dans un ordre bien précis :

try
{
// Code d''exécution normal
}
catch
{
// Gestion des erreurs
}
finally
{
// Nettoyage

}

Le bloc try contient le code qui effectue les opérations normales du programme, mais qui risque de rencontrer des erreurs plus ou moins innatendues.
Le bloc catch contient le code de traitement des erreurs, erreurs qui sont apparues lors de l''exécution du programme.
Le bloc finally contient le code qui nettoie les ressources ou que vous voulez impérativement exécuter après le bloc try ou catch.Ce bloc est exécuté qu''une exceptions soit levée ou pas !Il est interdit d''utiliser l''instruction return dans un bloc finally : le compilateur signale une erreur.
Le schéma de fonctionnement est le suivant :
- le flux d''exécution entre dans le bloc try- s''il n''y a pas d''erreur, on passe directement à l''étape 4- en cas d''erreur, l''exécution se poursuit dans le bloc catch où les erreurs sont gérées- le bloc finally est exécuté

2.2 Levée d''exceptions

Alors comment cela fonctionne-t-il ? Comment le runtime sait-il qu''il doit aller dans un bloc catch (ou pas) en cas d''erreur ?
Lorsqu''une erreur est détectée, le code lève une exception :throw new Exception();
Et c''est à ce moment là que l''exécution normale du bloc try s''arrête pour passer dans le bloc catch approprié :catch (Exception e) { }

2.3 Quelques classes d''exceptions

Le Framework offre beaucoup de classes gérant les exceptions dont :
- System.Exception
- System.SystemException
- System.ArgumentException
- System.ArgumentNullException
- System.OutOfRangeException
- System.IO.FileNotFoundException
- System.ApplicationException

Les classes d''exceptions sont des objets : la classe System.Exception hérite de la classe System.Object et toutes les autres classes d''exceptions héritent directement ou indirectement de la classe System.Exception.Par exemple, la classe ArgumentNullException hérite de ArgumentException qui hérite elle-même de SystemException qui (enfin) hérite de la classe de base Exception.
La classe Exception étant une classe de base, celle-ci traite toutes les exceptions possibles.
Lorsque votre application s''exécute avec en arrière plan le runtime .NET, votre fonction Main est en réalité imbriqué dans un gros bloc try (créé par le runtime) qui prévoit la levée d''une exception (Exception) : cela évite ainsi le fameux crash de l''application évoqué dans l''introcdution.
La classe ApplicationException est une classe héritant de la classe Exception et servira à créer vos propres classes d''exceptions. Vous verrez plus loin comment faire.
Dans le schéma suivant, toutes les classes appartiennent à l''espace de nom System, excepté IOException et ses dérivées qui se trouvent dans System.IO...




lundi, janvier 08, 2007

WDP (Web Deployement Project) sous VS 2005

je vous recommande dans ce sens l'article suivant parue sur le TechheadBrorthers : http://www.techheadbrothers.com/Articles.aspx?Id=d0db77ab-1f65-42f8-bf8d-0ce9f4a877ec
Un trés bon article qui illustre le mode d'utilisation du WDP sous VS 2005

Bonne utilisation !

dimanche, septembre 17, 2006

Nom final d'Atlas : ASP.net 2.0 Ajax extensions

Il y a quelques temps je vous avez parlé que Microsoft était en train de chercher un nom pour le projet 'Atlas je vous avez parlé que Microsoft était en train de chercher un nom pour le projet "Atlas". Et oui "Atlas" n'est qu'un nom de code.
Aujourd'hui Scott Guthrie nous annonce qu'il y aura une version finale d'Atlas avant la sortie d'Orcas : le prochain Visual Studio.
La partie Client-Side de Atlas s'appellera "Microsoft Ajax Library" cette partie pourra être utilisé dans tous les types de projet : asp, php, ..
La partie Server-Side s'appelle "ASP.net 2.0 Ajax Extensions", le tagprefix sera alors asp: plutot que atlas:
Enfin le projet Atlas Control Toolkit se nommera "ASP.net Ajax Control Toolkit"
Personnellement je trouve le choix de ce nom beaucoup trop marketing. Atlas sonnait trés bien, court et original, malheureusement ce nom ne signifie rien et Microsoft aime bien les nom à rallonge...
On apprend également une trés bonne chose ! Dans Visual Studio Orcas le debuging du JavaScript sera grandement simplifié et il y aura de l'intelisense ! J'ai hate de tester car l'intelisense pour du JavaScript me parait trés compliqué, excepté si on passe par le projet Script# ;-)
plus d'info sur le blog de Scott Guthrie : http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx

vendredi, septembre 08, 2006

We Love All MVP Leads


It was very very interesting !

dimanche, septembre 03, 2006

Migration Framework 2.0 vers WCF

Un trés bon exemple pour ceux qui veulent s''initier dans le développement WCF (Windows Communication Foundation)

Le suivant article parle d''une expérience sur un projet Developpé en framwerk 2.0 et qui va être migré par la suite en WCF : http://www.techheadbrothers.com/DesktopDefault.aspx?tabindex=1&tabid=7&AId=140&p=1

vendredi, septembre 01, 2006

Les MVP Open Days !!!

Ca commence bientôt nchalah l'événement précieux et attendue de l'année, celui des Agenda MVP Open Days, Cet evenement aura lieu en trurkey et comprendera de principaux conférences :

- 2007 Microsoft Office System avec Alexander Diacre, Regional Technology Specialist, MEA HQ.

- Windows Live ! avec Phil Holden, Director, Microsoft Corporation
- WCF & WF avec Mr Malek Kemmou, Regional Technology Specialist, MEA HQ

Et d'autres............!

programme tré chargé et j'en suis un participant :)

mardi, août 22, 2006

Atlas => ReleaseName : "WTF" ?

Cela fait déjà quelques mois que nous entendons parler de Atlas, mais il ne faut pas oublier que comme longhorn, Whidbey, Avalon, etc ... c''est un nom de code, Atlas va bientôt avoir un vrai nom rien que pour lui. Certains sont en train de s''amuser à choisir un nom et les propositions sont plutot sympas :
Active Client Pages - ACP
Yet Another MS Framework to Learn - YAMSFL
Rich Internet Foundation - RIF
Browser Programming Foundation - BPF
Mon préféré : Web Technology Framework - WTF ;-)

Pour voir les différents noms ca se passe ici : http://aspadvice.com/blogs/ssmith/archive/2006/08/16/Atlas_Naming_Game.aspx

dimanche, août 20, 2006

Surveillance de vos applications avec System.Diagnostics


Trés bon article sur l'utilisation du name space : System.Diagnostics dans le traçage des applications developpées et les services que ce système peut offrir à ses administrateurs.

Pour plus d'infos : http://www.microsoft.com/france/msdn/vbasic/advancedbasics2.mspx

mardi, août 08, 2006

Sandcastle : Générateur de Code Documentation

Sandcastle : Générateur de Code Documentation [08/08/2006]
Pour ceux qui avaient l''habitude de travailler avec un générateur de documentation de codes sous VS 2003, ils auront certainement constaté son abscence dans le VS 2005 comme AddIn, cependant MS vient de faire sortir un nouveau outil et concurent de Ndoc qui supporte .Net 2.0 et même .Net 3.0

Pour télécharger : http://www.microsoft.com/downloads/details.aspx?FamilyID=E82EA71D-DA89-42EE-A715-696E3A4873B2&displaylang=en
Pour tout infos supplémentaire ou help voici un blog consacré a l''utilisation de ce produit : https://blogs.msdn.com/sandcastle/archive/2006/07/29/682398.aspx

lundi, août 07, 2006

Atlas Control Toolkit 60731 Realeased

En téléchargement ici : http://www.codeplex.com/Release/ProjectReleases.as...
En live ici : http://atlas.asp.net/atlastoolkit

samedi, juillet 29, 2006

IE 7.0 sera une mise à jour prioritaire sur XP

Internet Explorer 7.0, devrait être considéré comme une mise à jour prioritaire. Les possesseurs d''un système d''exploitation Windows XP Service Pack 2 se verront donc proposés la nouvelle version d''Internet Explorer non seulement sur le site Windows Update mais également sous la forme d''une mise à jour automatique. Microsoft estime que les nombreuses améliorations apportées à la gestion de la sécurité sous Internet Explorer justifient que cette version 7.0 soit considérée comme une mise à jour prioritaire. Microsoft précise toutefois que l''installation d''Internet Explorer 7.0 ne sera pas totalement automatique, l''utilisateur se verra proposer ou non de l''installer. Pour les compagnies qui redoutent le déploiement quasi-automatique d''Internet Explorer 7.0 sur leurs postes de travail, Microsoft propose une boîte à outils qui permettra, le moment venu, de refuser purement et simplement la mise à jour vers Internet Explorer 7.0.

Si tout va bien Internet Explorer 7.0 devrait sortir dans le courant du quatrième trimestre de cette année.

mercredi, juillet 12, 2006

Asp.Net 2.0 : Best Practice Analyser

Best Practice Analyzer pour ASP.NET (alpha release) est un outil qui permet de faire un scan sur la configuration de votre Asp.Net application.
Son usage est simple il suffit de le télécharger de cette URL et l''installer sur votre machine : http://www.microsoft.com/downloads/details.aspx?FamilyID=D2717206-E804-415E-9173-C7B7327289E4&displaylang=en

vendredi, juin 30, 2006

Bill passe la main



Après 33 ans de bons et loyaux services, Bill gates a décidé de prendre sa retraite en juillet 2008 afin de se consacrer un peu plus à sa fondation caritative "Bill & Melinda Gates Foundation". Ce départ ne s'effectuera pas d'un seul coup et il y aura donc 2 ans de transition durant lesquels Bill délèguera ces différentes responsabilités au sein de Microsoft.

"This was a hard decision for me, I’m very lucky to have two passions that I feel are so important and so challenging. As I prepare for this change, I firmly believe the road ahead for Microsoft is as bright as ever.” Bill gates

lundi, juin 19, 2006

.NET Framework 3.0 !!

Désormais WinFx devient officiellement .Net FrameWork 3.0














Pour plus d'infos : http://blogs.msdn.com/somasegar/

jeudi, juin 01, 2006

Office Professionnel Plus 2007





La version Bêta de Microsoft Office Professionnel Plus 2007 est enfin disponible !
http://www.microsoft.com/france/office/2007/download/mscom.mspx

je l'ai installé et j'ai pû expérimenter les nouvelles fonctionnalités...

C'est révolutionnaire....!

dimanche, mai 21, 2006

MIX 06 : Web 2.0 (Steve Balmer)

Tout le contenu de la conférence : http://www.microsoft.com/france/msdn/mix/default.mspx

Développer une Application .NET sur une BDD Oracle

L'article suivant de John Paul est un tutorial enrichi par des labs sur le développement d'une solution connecté à une base de données ORACLE, ceci les sommaire

1. Introduction
2. Les fournisseurs de données .NET (.Net Data Provider)
3. Créer un nouveau projet dans Visual Studio.NET
3.1. Ajout d'une Référence
3.2. Déclarations VB.NET/C#
4. Chaînes de Connexion et Objets
4.1. L'objet Command
4.2. Récupération d'une seule valeur
4.3. Close et Dispose
5. La Gestion d'erreurs
6. Lecture de plusieurs valeurs via le DataReader
7. Conclusion

Lab 1: Lire des données dans la BDD
Lab 2: Ajoutons-y un peu d'interaction
Lab 3: Récupérer plusieurs enregistrements multi-colonnes grâce au DataReader

Pour en savoir Plus : http://xo.developpez.com/tutoriel/dotnet/oracle/odt/

jeudi, mai 04, 2006

Microsoft Technet sur Casa et Rabat le 16 et 17 Mai

Thémes :
- Consolidation de serveurs et virtualisation avec Virtual Server 2005 R2
- Sécurité de la plate-forme messagerie Exchange Server 2003 et des accès distants

Lieu et dates :
- Casablanca : le mercredi 17 mai 2006 à l'hôtel Hyatt Regency à partir de 14h30.
- Rabat : le mardi 16 mai 2006 à l'hôtel Hilton Rabat à partir de 14h30.

Animés par :
- Hugues Sauvage (Syntone)
- Abdelilah Nejjari (Profilium)

jeudi, avril 27, 2006

Internet Explorer 7 : téléchargez la version bêta 2

Comment optimiser vos recherches sur le Web ou profiter pleinement des flux RSS avec IE7 ? Découvrez quelques trucs et astuces simples pour bien démarrer avec votre nouveau navigateur (en anglais) : http://www.microsoft.com/windows/ie/fr-fr/betadownload.mspx

jeudi, avril 13, 2006

Présentation de la version 7.0 de IIS

La première version de IIS a vu le jour en 1996 avec Windows NT 4.0 Server. Plusieurs évolutions rapidement vu le jour sous la forme de service pack pour Windows NT (le serveur Web en était à sa version 4 en 1997). Plusieurs années plus tard (en l'an 2000), Microsoft intégra une version revue au sein de son nouveau système : Windows 2000 Server. Cette édition de IIS était installée par défaut en même temps que l'OS . Cela participa à sa diffusion sur le marché mondial mais posa de nombreux problèmes de sécurité (notamment mis en évidence par le ver NIMDA).

Avec Windows Server 2003 et Internet Information Services 6, l'accent a été mis sur la sécurité et la stabilité (création des pools d'application pour isoler les sites Web les uns des autres et mieux gérer les ressources système, le composant n'est plus installé par défaut...). Le service pack 1 de Windows Server 2003 confirme cette tendance étant donné que de nombreux paramètres ont été modifiés pour réduire encore la surface d'attaque et augmenter au maximum la sécurité de l'application (désactivation de l'accès anonyme par défaut, restriction des droits du compte SERVICE RESEAU....).

Les nouvelles fonctionnalités de IIS 7.0

lundi, avril 03, 2006

Cryptage des Sections Web.config sous Asp.net 2.0

Parmi les nouvelles possibilités que la version 2.0 d''asp.net la possibilité d''effectué un cryptage des sections Web.config pour empecher tte lecture Ex de section : ConnectionStrings

Avant le cryptage





Pour ce faire, il suffit de taper la commande suivante automatiquement:

aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"

Autre methode, la programmation :

Configuration config = Configuration.GetWebConfiguration(Request.ApplicationPath);
ConfigurationSection section = config.Sections["connectionStrings"]; section.ProtectSection ("DataProtectionConfigurationProvider");
config.Update();

Aprés cryptage, les sections deviennent :




AQAAANCMndjHoAw...


Pour plus d'infos : http://www.dotnet-maroc.com/ArticlesReader.aspx?ID=155

jeudi, mars 30, 2006

Livre Blanc WSE (Web Services Enhanecement)

Ce livre blanc constitue une présentation de l’architecture de services Web sous l’angle technique. Il décrit les principes de conception et les technologies fondamentales des services Web, leurs fonctionnalités évoluées et comment elles sont liés aux spécifications WS-* qui les définissent de façon formelle.
Vous pouvez considérer que ce document sert aussi de guide de référence pour toutes les spécifications WS-*.

http://download.microsoft.com/download/4/e/4/4e4b650c-c0cc-4f34-a2f7-5c2df883c5fe/PDF/Introduction-architecture-services-Web-et-specifications-WS.pdf

mercredi, mars 29, 2006

MSDN EVENTS


Microsoft organise un grand événement c'est l'évenement MSDN organisée pour la 2 fois il comprendera 2 sessions :
l'administration sous SQL d’exploitation serveur 2005 & WSE 3.0
Les journnées de cet évenement seront animés par Mr Tarhine Abdellatif, Tarik Arrad, Moi même :) et Mr Adil Jiri cet evénement va s'organiser sur Casa et Rabat

vendredi, mars 10, 2006

Premier rendez vous TechNet au Maroc

Premier rendez-vous Microsoft TechNet sur Rabat et Casablanca : Maîtrisez Windows 2003 Server

Pour son premier rendez-vous de l’année 2006, Microsoft TechNet vous invite à vous intéresser à Windows Server 2003, à ses nouvelles fonctionnalités et à ses améliorations.Les deux sessions au programme aborderont la haute disponibilité sous Windows Server 2003 avant d’introduire Windows 2003 R2 afin de vous aider à vous familiariser davantage avec le Système d’exploitation serveur nouvelle génération.

Plus d'infos : http://www.microsoft.com/northafrica/technet/seminaires/technet_q1_2006.aspx

Amélioration de la sécurité dans le .NET Framework 2.0

La sécurité est généralement considérée comme une surcharge. L'intégration de la sécurité dans les applications représente généralement du temps, de l'argent et n'est pas une opération directe. Cependant, dans un contexte de développement d'applications sécurisées, les développeurs doivent être soucieux de créer des applications sûres, car il s'agit d'une exigence des entreprises. En outre, à mesure que les exigences de compatibilité sont devenues plus contraignantes, les équipes de développement ont commencé à réaliser que la création d'applications sécurisées n'est plus facultative, car la protection des informations client sensibles est une fonction indispensable dans les environnements numériques d'aujourd'hui. Par le passé, la sécurité était l'affaire de quelques personnes, considérées comme des « gourous de la cryptographie », dont le rôle était de superposer la sécurité sur le code existant juste avant la mise en production ou pire, après la découverte des vulnérabilités. En fait, de nombreux développeurs et organisations informatiques partent du principe que la cryptographie (et plus particulièrement SSL) est le « bouton rouge » qui représente la solution à tous les problèmes de sécurité. Les fonctionnalités de sécurité n'étaient pas intuitives dans les langages et environnements, et n'étaient pas simples à utiliser. Heureusement, grâce à certains nouveaux environnements, tels que Java et Microsoft .NET, ce problème est devenu marginal. Ces environnements tentent de permettre aux développeurs de faire plus facilement « les bons choix », tout en rendant plus difficile de faire les mauvais choix. Le .NET Framework 2.0 et Visual Studio 2005 tentent un saut significatif afin de permettre aux développeurs d'intégrer facilement les principes du développement sécurisé des applications. Les nouvelles versions du Framework et de l'environnement de développement offrent aux équipes de développement logiciel plusieurs nouveaux outils, fonctionnalités et aides afin de permettre aux programmeurs d'intégrer les fonctionnalités de sécurité avec un stress minimal.

Lire suite de l'article : http://www.microsoft.com/france/msdn/netframework/foundstone.mspx#EGB

mardi, mars 07, 2006

Cinq versions pour Windows Vista



Microsoft a prévu deux versions entreprise et trois pour le grand public de son prochain système d’exploitation. L’une d’entre elles, baptisée "Ultimate", reprenant la totalité des fonctionnalités. Il publie également une nouvelle bêta de Vista entreprise.

Microsoft a présenté les versions de son prochain système d'exploitation Vista, dont la sortie définitive est programmée au second semestre 2006. Au total, cinq versions ont été retenues: deux pour les entreprises, trois pour le grand public. «Notre objectif est de démocratiser l'usage de technologies comme le 64 Bits, le Tablet PC ou le Media Center, en fonction des clients», explique Philippe Perechodkin, chef produit Windows.
Pour les entreprises, Microsoft mise sur Windows Vista Business, qui proposera «un environnement plus clair, pour se concentrer sur l'essentiel, (...) améliorer la productivité de l'utilisateur», poursuit Philippe Perechodkin. «Cette version devrait permettre une meilleure gestion opérationnelle des PC, en permettant une mise à jour permanente et limitant les interruptions de services (reboot).»
L'éditeur proposera aussi sa nouvelle interface graphique Aero (interface 3D, effet de transparence, fonctions de recherche...). Cette version intégrera également les fonctions de Tablet PC «pour permettre une interaction avec le stylet et le doigt», ainsi qu'un Mobility Center présentant, sous une seule interface, «toutes les fonctions utiles à l'utilisateur dans une situation de mobilité».
«Pour les grandes entreprises qui ont des problématiques de gestion de parcs», Microsoft proposera une version Windows Vista Entreprise. Elle ne sera disponible que via le programme de licence de l'éditeur (Software Assurance). Elle reprendra l'ensemble des fonctionnalités de la version Business, «avec des composantes supplémentaires pour aider les départements IT dans la gestion du facteur risque», précise le chef produit Windows. Elle devrait également permettre une «meilleure gestion de la compatibilité pour prendre en compte l'existant lors de la migration». Microsoft promet par ailleurs «une sorte de trousse à outils» d'aide au déploiement, pour réduire les coûts d'infrastructure.
Pour le grand public, trois versions seront disponibles. Windows Vista Home Basic est «le système destiné au PC pour une utilisation assez limitée (e-mail, navigation internet, outils de bureautique)», souligne Philippe Perechodkin.
Microsoft préfère plus particulièrement mettre l'accent sur ce qui constituera son produit phare, la version Home Premium, «le meilleur choix pour tirer pleinement parti des usages du PC à la maison: multimedia, jeu, mobilité...» Elle aussi bénéficiera de l'interface graphique Aero et de la compatibilité avec Tablet PC. Mais surtout, elle intégrera la fonction Media Center, permettant entre autres l'enregistrement TV, l'accès aux contenus HD et le support avec la Xbox 360.
Pas de politique tarifaire encore définie
Dernière version, la Windows Vista Ultimate combinera l'ensemble des fonctionnalités de Business et de Home Premium. «Elle est destinée aux utilisateurs avancés, soit le grand public averti, soit des PME», affirme le chef produit Windows.
Toutes ces versions seront disponibles en version OEM ou en boîtier (Sauf Vista Entreprise), ainsi qu'en 32 ou 64 bits. Mais la politique tarifaire de Microsoft n'est pas encore définie. Par ailleurs, pour le marché européen, des versions Home Basic N et Business N, c'est-à-dire dépourvues de Windows Media Player, seront proposées conformément aux sanctions infligées en 2004 par la Commission européenne. Une version Vista Starter Edition sera aussi lancée pour les pays émergents.
Parallèlement, Microsoft vient de terminer une version bêta orientée pour les entreprises de Vista. Comme ce fut le cas avec la récente version «preview Bêta» d'Internet Explorer 7, cette version de développement de Vista est réservée aux experts.
Il s'agit d'une CTP (Community Technology Preview), selon le jargon de Microsoft, autrement dit «d'une bêta technique à destination des départements IT des entreprises pour tester leurs applications métiers et les outils de développement de Vista», explique Philippe Perechodkin. «Une autre version bêta de Vista pour entreprise, à destination d'un plus large public, dont les revendeurs, sera publiée plus tard ce semestre», poursuit-il
Cette première version de développement est accessible aux abonnés des programmes MSDN (Microsoft Developer Network) et TechNet, et aux entreprises participant au programme Technology Adoption Program (TAP). Il permet d'obtenir des informations anticipées sur les produits Microsoft. Quelque cinquante entreprises y sont abonnées en France, majoritairement des grands comptes.

vendredi, février 24, 2006

.Net Pizza Party (.Net User Group)


La .Net Pizza Party revient en force pour sa 6ème édition au Technopark à Casablanca le 28 février 2006
l''Ordre du jour sera :

Asp.Net 2.0 en pratique
: Nouvelles fonctionnalitésAstuces de tous les joursClassement des 10 meilleures fonctionnalités

Visual Studio 2005 en pratique
:Nouvelles fonctionnalitésAstuces de tous les joursClassement des 10 meilleures fonctionnalitésPrésentation du nouveau site de la communauté :

Architecture & Conception
Fonctionnalités nouvelles et à venir

mercredi, février 22, 2006

ASP 2.0 : Astuce DefaultButton et DefaultFocus

Quand on navigue sur une page, il se peut que l'on veuille que par défaut, un contrôle ait le focus. Par exemple, imaginez une page de login : ce serait bien si l'on va sur cette page que le textbox ou l'on attend de saisir le nom soit déjà actif.
Pour le faire avec ASP .NET 1.x, il fallait implémenter soit même son javascript. Avec ASP .NET v2.0, il suffit d'ajouter une propriété à votre objet form, je vous renvoie vers ce que j'ai publié comme article sur le site communauté : http://www.dotnet-maroc.com/ArticlesReader.aspx?ID=127

mercredi, février 15, 2006

Synthèse du Bulletin de sécurité de février 2006 relatif à Microsoft Windows



Consulter la synthèse du Bulletin de sécurité de février 2006 relatif à Microsoft Windows :

Version : 1.0

http://www.microsoft.com/france/technet/securite/ms06-feb.mspx

mercredi, février 08, 2006

Etude comparative .Net, Java, Mono

XML Mark c’est un outil de simulation crée par Sun Microsystems dans le but de tester les performances des technologies suivantes : Java, .Net Framework, Mono. Cette analyse a comme objectif de minimiser les process que le cycle de vie d’un document XML peut avoir, à savoir : le Parse, Access, Modify, Serialize
Son exécution simule des programmes multi-thread qui exécutent plusieurs Documents XML en parallèle. Ce scénario est similaire à un accès concurrentiel vers un Web service exposé.

Résultats:

Tests (Scores in Transactions/Second)

Conclusion :
En terme de performances, le .net Framework dépasse largement les autres plateformes, ceci est grâce à l’exécution efficace garantit par le CLR (Common Language Runtime).
Framework (toutes versions : 1.1 32 bit, 2.0 32 bit & 64 bit) comparé à Java, double ses scores à presque 60% de performance. Cependant le Mono beaucoup d’améliorations à développer en terme de performances (toutes versions.

Source : http://www.process64.com/articles/xmlmark1/

IT's ShowTime !

Assistez aux meilleurs événements IT : http://www.microsoft.com/emea/itsshowtime/northafrica/

mardi, février 07, 2006

Accélérer le chargement de ses pages web grâce au cache

L'objet Cache

Si vous disposez d'un site dynamique utilisant fréquemment l'accès à une base de données, il devient vite intéressant de stocker vos données dans un objet cache et ainsi accélérer le chargement du site côté client et ne pas surcharger le serveur d'hébergement.Les données mises en cache sont donc plutôt les données généralement utilisées pour de l'affichage et ne nécessitant pas un rafraîchissement en temps réel à chaque connection d'un utilisateur.*Au lieu de répéter les mêmes requêtes et provoquer des connections répétées, il est plus judicieux de placer certaines données dans un cache*

Utilisation

Une propriété du cache permet d'inscrire ces données un certains temps en mémoire et éviter d'effectuer à nouveau un accès à votre base. Lorsque ce temps est échu, le cache se vide et un traitement permettra de le recharger.Tous les objets du Framework pouvant contenir des données peuvent être stockés dans ce cache.Chaque objet cache à un nom d'accès ex : Cache["RSS_plus"] et une durée de stockage. Afin de lire les données du cache, il suffit d'appeler l'objet en indiquant le nom d'accès. Ici « RSS_plus ».Il est important de bien spécifier le type à récupérer afin de le transférer dans l'objet récepteur. Ceci s'effectue en précisant entre parenthèses devant le cache le type d'objet récepteur.

System.Xml.XmlDataDocument source =(XmlDataDocument)Cache["RSS_plus"];
Ou
DataSet DataNews=(DataSet)Cache["news"];

Nous verrons ci-dessous un exemple en C# avec XmlDataDocument et un Dataset.NB : Si vous voulez retranscrire cet exemple en VB.NET, la notation du cache est différente. On devra remplacer les [] par des () lors de l'utilisation du cache.

Exemple

Exemple1 : l'objet XmlDataDocument
Ici nous allons récupérer des données Xml, plus précisément des données au format RSS et les mettre dans notre cache 15 minutes.Nous accélérerons d'une part le chargement de notre page et de plus, nous soulagerons le serveur ou nous récupérons ce flux.
try
{ //news speedloop.org
//On remplit la source de donnes avec le cache
System.Xml.XmlDataDocument source=(XmlDataDocument)Cache["RSS_plus"];
//Si le cache est vide, la source est vide
if (source==null)
{
System.Net.WebRequest webrequest =
System.Net.WebRequest.Create("http://www.speedloop.org/RSS/RSS.aspx");
webrequest.Timeout=5000;

XmlTextReader reader =
new System.Xml.XmlTextReader(webrequest.GetResponse().GetResponseStream());
source = new System.Xml.XmlDataDocument();
source.Load(reader);

//Nouveau cache des donnes avec une duree de 15 minutes
Cache.Insert("RSS_plus",source,null,DateTime.Now.AddMinutes(15),TimeSpan.Zero);
}

//Remplissage de RssXml
RssXml.Document = source;

//Application dune transformation XSL
RssXml.TransformSource = "news_forum.xslt";
}
catch(Exception ex){//traitement}

Exemple2 :

l'objet DataSet// Mise du cache dans le DataSet
DataSet DataNews=(DataSet)Cache["news"];
if (DataNews==null)
{
try
{
//Liste_News() renvoie un DataSet
DataNews=Components.News.Liste_News();
//Inscription dans le cache pour 1 heure
Cache.Insert("news",DataNews,null,DateTime.Now.AddMinutes(60),TimeSpan.Zero);
}
catch(Exception es){//traitement};
}
//Affichage dans un repeater
Repeater1.DataSource=DataNews;
Repeater1.DataBind();

Conclusion


L'utilisation du cache est particulièrement adaptée dans le cas de la récupération fréquente de flux RSS. Les contributeurs du flux vous remercieront certainement de ne pas surcharger leur serveur.Bon cache !

lundi, février 06, 2006

La gestion des tests sur Visual Studio 2005

Cet article à pour objectif de citer les scénaries envisageables lors de la conception d''une application dans un environnement VS 2005

Quel SGBD choisir ?

Cet article définit briévement les importantes caractéristiques des differents SGBD disponibles, Il existe bien entendu d''autres SGBD ; ici sont regroupés les SGBD sur lesquels des avis ont été donnés.

Borland
Versions
• La version IB6 (dépréciée) et Firebird OpenSource
• La Desktop Edition payante, est une version améliorée.
• La Server Edition inclut de nombreux autres outils (InterClient, IBX) ainsi qu''un support complet d''ODBC.

Avantages
• Administration aisée (auto-administrée, auto-optimisée)
• Version Opensource disponible
• Très bonne intégration aux autres outils Borland C++ Builder ou Delphi

Inconvénients
• Digère mal les grosses volumétries
• Nombre limité de connecteurs si l''on quitte l''accès via Delphi, et ceux-ci ne sont pas toujours gratuits
• Pas de cryptage
• Pas de cluster

DB2-UDB
Version actuelle : 8.2.2DB2-UDB reste de toute manière un choix d''entreprise, bien qu''une version sous Windows soit téléchargable.

Avantages
• Monitoring via le Health-center
• Nombreux assistants qui auraient dû permettre une administration plus aisée (mais très gourmande en ressources)
• Richesse fonctionnelle du language
• Gestion centralisée de plusieurs instances

Inconvénients
• Interface client Java lourd instable, peu conviviale avec des menus contextuels à rallonge. Dan les faits, seule la ligne de commandes semble stable !
• Journalisation gourmande, même avec des jounaux tournants
• Renommage de colonnes impossible = faiblesse de DDL, bien que les assistants tentent maladroitement de cacher ces faiblesses en exécutant des traitemetns lourds • Prix exhorbitant des licences
• Gestion des utilisateurs extrêmement limitative, dédiée à l''OS
• Ecriture des procédures stockées au niveau des SELECT (que l''on doit systématiquement encapsuler dans un curseur)

SQL Server, MSDE et SQL 2005 Express
Versions
• Microsoft SQL Server
• MSDE : gratuit, optimisé pour 5 utilisateurs concurrents, maximum 2 Go de disque
• SQL Server 2005 Express Edition : gratuit, limité à 1 CPU, tables de 4 Go, 32 bits unquement Les avantages et inconvénients portent sur les 3 versions citées, compte tenu que techniquement, MSDE et SQL Server 2005 Express se basent sur le noyau de Microsoft SQL Server bridé.
• Microsoft SQL Server 2005

Avantages
• Administration aisée
• Reporting disponible
• Réplication intégrée (sauf pour MSDE)
• Frontaux et assistants très poussés (sauf pour MSDE)
• Langage T-SQL très convivial, intégration de CLR
• Procédures stockées simples à écrire
• Sous-SELECT possible dans clause FROM
• Gestion de l''indexation textuelle, même si elle se relève incomplète ou inadaptée à la langue française
• Services Web
• Support XML

Inconvénients
• Mono-plateforme (MS Windows)
• Distributions fortement liées au système d''exploitation

MySQL
Versions
• MySQL Community Edition : licence GPL
• MySQL Max (sous Linux) = MySQL Community Edition + certaines options permettant l''amélioration des performances
• MySQL Pro Certified Server = MySQL Community Edition + certifié sécurité et performance + licence d''entreprise MySQL Network
• MaxDB by MySQL: anciennement connue sous le nom de SAP DB. SAP avait racheté les droits de ADABASE D à Software AG. Il l''a transféré sous licence GNU et laisse à MySQL le soins d''en continuer le développement.

Avantages
• Solution très courante en hébergement public
• Très bonne intégration dans l''environnement Apache/PHP
• OpenSource, bien que les critères de licence soient de plus en plus difficiles à supporter
• Version cluster depuis la version 4
• Facilité de déploiement et de prise en main.
• Plusieurs moteurs de stockage adaptés aux différentes problématiques.

Inconvénients
• Ne supporte qu''une faible partie des standards SQL-92
• Support incomplet des triggers et procédures stockées
• Gestion des transactions que depuis la version 4 avec InnoDB
• Assez peu de richesse fonctionnelle
• Manque de robustesse avec de fortes volumétries
• Pas d''héritage de tables

Oracle
Versions
• Oracle Enterprise Edition
• Oracle Standard Edition
• Oracle Personal Edition
• Oracle Database 10g Express Edition, limitée à 4 Go, 1Go de RAM, 32 bits, Linux/Windows

Avantages
• Procédures stockés en pl/sql (langage propriétaire Oracle, orienté ADA) ou ... en JAVA (depuis la 8.1.7) ce qui peut s''avérer utile pour les équipes de développement.
• Assistants performants via Oracle Manager Server, possibilité de gérer en interne des tâches et des alarmes
• Gestion centralisée de plusieurs instances
• concept unique de retour arrière (Flashback)
• Pérennité de l''éditeur : avec plus de 40% de part de marché, ce n''est pas demain qu''Oracle disparaîtra
• Réglages fins : dans la mesure ou l''on connait suffisament le moteur, presque TOUT est paramétrable.
• Accès aux données système via des vues, bien plus aisément manipulable que des procédures stockées.
• Interface utilisateur remaniée et extrêmement riche, permettant - enfin ! - le tuning fin de requêtes par modification des plans d''exécution.
• Services Web
• Support XML

Inconvénients
• Coût excessif : s''attaquant aux grosses entreprises, Oracle use de prix élevés. Il existe cependant des versions plus légères (à tous points de vue).
• Fort demandeur de ressources : ce qui n''arrange rien au point précité, Oracle est bien plus gourmand en ressource mémore que ses concurrents, ce qui implique un investissement matériel non négligeable. La connexion utilisateur nécessite par exemple près de 700 Ko/utilisateur, contre une petite centaine sur des serverus MS-SQL ou Sybase ASE .
• Porosité entre les schémas (= difficile de faire cohabiter de nombreuses applications sans devoir créer plusieurs instances)
• Métamodèle propriétaire, loin de la norme.
• Tables partitionnées, RAC... uniquement possible à l''aide de modules payants complémentaires. Parallélisme mal géré sur des tables non-partitionnées.
• Gestion des verrous mortels mal conçue (suppression d''une commande bloquante sans rollback)
• Pauvreté de l''optimiseur (ne distingue pas les pages en cache ou en disque, n''utilise pas d''index lors de tris généraux, ...)
• Pas de prise directe sur les tables système (vues système)
• Gestion erratique des rôles et privilèges (pas possible e donner des droits sur des schémas particuliers sans passer par leurs objets, désactivation des rôles lors d''exécution de packages...)
• Mais surtout: opacité de l''éditeur. Même au niveau des cours donnés par Oracle, il est quasi impossible d''obtenir des informations concernant les fonctionnements internes du moteur.

vendredi, février 03, 2006

Choix d'architecture Client lourd ou léger

La conception d''une application implique de prendre des décisions sur son architecture logique et physique, ainsi que sur les technologies et l''infrastructure utilisées pour implémenter ses fonctionnalités. Dans le cadre de cette prise de décisions, il faut comprendre parfaitement comment les processus métier sont exécutés par l''application (les exigences fonctionnelles), ainsi que les niveaux d''évolutivité, de disponibilité, de sécurité et de maintenabilité (les exigences non fonctionnelles ou opérationnelles).
L’objectif de ce document est d’aider à définir l’architecture de la solution à développer, et qui doit prendre en charge les critères suivants :

- Sécurité : traite dès le départ des problèmes de sécurité, en tenant compte des mécanismes d''authentification appropriés, de la logique d''autorisation et de la sécurisation de la communication.
- Performance : offre des performances élevées et qui est optimisée pour des opérations classiques sur les modèles de déploiement.
- Disponible et Flexible : assure une disponibilité élevée qui garantit la continuité du service.
- Adaptation : s''adapte pour répondre aux exigences attendues et prend en charge un grand nombre d''activités et d''utilisateurs avec le moins de ressources possibles.
- Gestion : est facile à gérer, permettant aux opérateurs de déployer, de surveiller et de dépanner l''application, comme prévu par le scénario.
- Maintenance et Evolutivité : est facile à entretenir. Chaque partie de la fonctionnalité doit être localisée et conçue de manière prévisible, selon la diversité des tailles d''application, des qualifications des équipes de développement et des modifications des spécificités techniques et commerciales.
- Intégration : fonctionne selon plusieurs scénarios d''application et modèles de déploiement.

Pour en savoir Plus, j'ai posté la suite dans les tutoiriels du site communauté : http://www.dotnet-maroc.com/TutorielReader.aspx?ID=39

Services Web ASP.NET ou .NET Remoting ?

Au fil du temps, il est devenu courant de construire des applications sous forme d''ensembles de composants distribués sur un réseau de machines, qui fonctionnent ensemble comme autant d''éléments d''un programme global. Lorsqu''il s''agissait d''applications distribuées, on avait l''habitude d''utiliser des technologies orientées objet ou composant comme DCOM (Distributed Component Object Model, Microsoft®), CORBA (Common Object Request Broker Architecture, Object Management Group) ou RMI (Remote Method Invocation, Sun).
Présentation
Ces technologies offraient une architecture fiable et évolutive qui permettait de répondre aux besoins croissants des applications.
Si ces technologies à composants fonctionnent très bien dans un environnement intranet, leur utilisation sur Internet présente deux problèmes majeurs. Tout d''abord, elles ne sont pas compatibles. Bien qu''elles fonctionnent toutes avec des objets, ces technologies ne s''accordent pas sur les détails, comme par exemple la gestion du cycle de vie, la prise en charge de constructeurs et le degré de prise en charge de l''héritage. Ensuite, et surtout, elles utilisent exclusivement des communications de type RPC, ce qui conduit à des systèmes étroitement imbriqués construits autour d''appels explicites des méthodes objet.
Les applications Web fonctionnant sur navigateur sont, tout au contraire, flexibles et remarquablement interopérables. Elles communiquent via HTTP pour échanger des données MIME dans des formats divers et variés. Les Web Services adaptent le modèle traditionnel de programmation Web pour qu''il soit utilisable dans tous types d''applications et non exclusivement dans celles fonctionnant sur navigateur. Ils échangent des messages SOAP à l''aide de HTTP et autres protocoles Internet. Les Web Services sont fondés sur des normes comme HTTP, XML, SOAP et WSDL ; pour exposer les fonctionnalités d''une application sur Internet, ils sont donc indépendants du langage de programmation, de la plate-forme et du dispositif utilisés.
L''infrastructure des Web Services ASP.NET offre une API simple pour les Web Services, qui fonctionne par mappage de messages SOAP sur des appels de méthodes. Pour ce faire, elle propose un modèle de programmation très simple, qui consiste à mapper les échanges de messages SOAP sur des appels de méthodes spécifiques. Les clients des Web Services ASP.NET n''ont besoin de connaître ni la plate-forme, ni le modèle objet, ni le langage de programmation utilisé pour les construire. Les services eux-mêmes n''ont pas besoin d''avoir d''informations sur les clients qui leur envoient des messages. La seule exigence est que les deux parties s''accordent sur le format des messages SOAP produits et consommés, défini dans le contrat du service Web exprimé à l''aide de WSDL et du schéma XML (XSD).
.NET Remoting offre une infrastructure pour les objets distribués. Il expose l''intégralité de la sémantique objet de .NET aux processus distants par des mécanismes à la fois très flexibles et très extensibles. Par rapport aux Web Services ASP.NET, qui proposent un modèle de programmation très simple basé sur la transmission de messages, .NET Remoting offre des fonctionnalités plus complexes : il prend en charge la transmission d''objets par valeur ou par référence, les rappels, ainsi que des stratégies de gestion des cycles de vie et d''activation de plusieurs objets. Pour utiliser .NET Remoting, un client doit connaître tous ces détails (en fait, le client doit avoir été construit avec .NET ou avec une autre structure prenant en charge .NET Remoting ; la seule que nous connaissions est Ja.NET pour Java, d''Intrinsyc). Les mécanismes de .NET Remoting prennent aussi en charge les messages SOAP, mais il est important de souligner que cela ne change rien à la configuration requise pour le client. Si un point d''entrée distant expose une sémantique objet spécifique à .NET, que ce soit ou non via SOAP, le client doit la comprendre.
Le fait que .NET Framework prenne en charge deux modèles de programmation distribuée différents (Web Services et objets distribués) a créé une certaine confusion pour les développeurs. Comment savoir si un système doit utiliser les Web Services ASP.NET ou .NET Remoting ? Pour répondre à cette question, il faut comprendre comment fonctionnent réellement ces deux technologies.
Sérialisation et métadonnéesEn fin de compte, un mécanisme de communication distribuée effectue deux opérations : il assure le marshaling des instances des types de données de programmation dans des messages pouvant être envoyés sur le réseau et donne une description de l''apparence de ces messages. La première opération est effectuée par un moteur de sérialisation ou marshaler. La deuxième est réalisée au moyen de métadonnées. Par exemple, pour la plupart des interfaces DCOM (jusqu''à présent), le moteur de sérialisation était le Type Library Marshaler et les bibliothèques de types fournissaient les métadonnées. La différence essentielle entre les Web Services ASP.NET et .NET Remoting réside dans la méthode de sérialisation des données en messages et le format utilisé pour les métadonnées.
Services Web ASP.NET, XmlSerializer et XSDLes Web Services ASP.NET utilisent la classe System.Xml.Serialization.XmlSerializer pour effectuer, au moment de l''exécution, le marshaling des données provenant de messages SOAP ou à destination de ceux-ci. Pour les métadonnées, ils génèrent des définitions WSDL et XSD qui décrivent le contenu de leurs messages. Grâce à ce recours exclusif à WSDL et XSD, les métadonnées des Web Services ASP.NET sont portables ; les structures de données sont exprimées de façon à être comprises par d''autres boîtes à outils de Web Services, sur des plates-formes différentes et même avec d''autres modèles de programmation. Dans certains cas, cela impose des contraintes sur les types que vous pouvez exposer à partir d''un service Web (XmlSerializer n''effectue un marshaling que pour les informations qui peuvent être exprimées en XSD). Pour être plus précis, XmlSerializer n''effectue pas de marshaling sur les graphiques d''objets et ne prend ne charge que certains types de conteneurs.
Bien que ces limitations semblent significatives dans une perspective d''objets distribués classique, elles améliorent l''interopérabilité avec d''autres structures de Web Services (objectif essentiel pour un modèle de service Web flexible). L''interopérabilité est encore améliorée par une grande variété d''attributs personnalisés qui permettent d''annoter les types de données afin de contrôler la façon dont le XmlSerializer en assure le marshaling. Vous gardez donc un contrôle précis sur la forme du XML généré lorsqu''un objet est sérialisé. De plus, un service Web basé sur ASP.NET peut être modelé afin de décrire ses messages en termes de XSD littéral ou en fonction des règles de codage de SOAP (c''est-à-dire la section 5 des spécifications de SOAP). Le XSD littéral est défini par défaut et sera dorénavant la norme en vigueur. La prise en charge du codage SOAP est incluse pour conserver une bonne interopérabilité avec les boîtes à outils existantes. Cela s''avère utile, en particulier si vous avez besoin de communiquer avec un client ou un service Web qui ne sait communiquer qu''avec un format de message prédéfini.
.NET Remoting, IFormatter et CLR (Common Language Runtime).NET Remoting a recours aux implémentations connectables de l''interface IFormatter qu''utilise le moteur System.Runtime.Serialization pour effectuer le marshaling des données à destination des messages et en provenance de ceux-ci. Il existe deux formateurs standard : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter et System.Runtime.Serialization.Formatters.Soap.SoapFormatter. Comme leur nom le suggère, BinaryFormatter et SoapFormatter effectuent un marshaling des types en formats binaire et SOAP, respectivement. Pour les métadonnées, .NET Remoting utilise les assemblys du CLR, qui contiennent toutes les informations pertinentes sur les types de données qu''ils mettent en œuvre et les exposent par réflexion. Grâce à l''utilisation d''assemblys pour les métadonnées, il est aisé de préserver une fidélité type-système absolue lors de l''exécution. Ainsi, lorsque les mécanismes de .NET Remoting effectuent un marshaling des données, ils incluent tous les membres d''une classe (publics et privés), gèrent les graphiques d''objet correctement et prennent en charge tous les types de conteneurs (par exemple System.Collections.Hashtable). Toutefois, le recours aux métadonnées d''exécution limite également la portée d''un système .NET Remoting (un client doit comprendre les constructions .NET pour communiquer avec un point d''entrée .NET Remoting). Outre les formateurs connectables, la couche .NET Remoting prend en charge les canaux connectables, qui font abstraction des détails de transmission des messages. Il existe deux canaux standard, un pour le TCP brut et l''autre pour HTTP. Les messages peuvent être envoyés indifféremment sur l''un ou l''autre des canaux, quel que soit leur format.
Jeter le trouble : Remoting et Web ServicesLa présence d''un formateur SOAP et d''un canal HTTP nous amène naturellement à nous poser la question suivante : est-il possible d''utiliser .NET Remoting pour construire des Web Services ? La réponse est oui et non. La pile de technologies standard des Web Services a non seulement recours à des messages SOAP mais aussi à des descriptions WSDL et XSD de ces messages. Remoting peut effectivement générer des définitions WSDL décrivant les messages qu''un point d''entrée produit et consomme. Mais si vous suivez cette logique, vous rencontrerez plusieurs écueils.
Premièrement, les fichiers WSDL générés décrivent toujours les messages selon les règles de codage SOAP et non en XSD littéral. Ce n''est pas un problème dans l''immédiat, mais cela pourrait le devenir lorsque de plus en plus d''outils seront entièrement spécifiques à des schémas.
Deuxièmement, les fichiers WSDL générés comportent des extensions spécifiques à .NET Remoting. Par exemple, voici une classe simple qui utilise .NET Remoting pour exposer son comportement.
public class Methods : MarshalByRefObject { // La méthode Now renvoie l''heure et la date en cours public string Now() { return System.DateTime.Now.ToString(); } } Si vous générez du WSDL à partir de cette classe, les informations de liaison comprendront des détails spécifiques à .NET Remoting, comme montré ci-dessous.
... ... Ces éléments supplémentaires sont autorisés car les spécifications WSDL prennent en charge l''extensibilité. Si elle est bien conçue, une boîte à outils de service Web qui ne les comprendrait pas doit simplement les ignorer. Il existe cependant quelques éléments qu''une boîte à outils de service ne peut ignorer. Par exemple, voici un point d''entrée distant qui renvoie un System.Data.DataSet Microsoft® ADO.NET.
public class Methods : MarshalByRefObject { public System.Data.DataSet GetEmptyDataSet() { return new System.Data.DataSet(); } } Voici la définition WSDL générée pour le message résultant de cette méthode :
Normalement, un message WSDL fait référence aux types définis dans un espace de nom spécifique à l''aide du schéma XML. Dans ce cas néanmoins, le préfixe d''espace de noms ns3 appliqué au type DataSet n''est pas défini en XSD. Il est défini implicitement via l''exécution. Dans cet exemple, le préfixe ns3 est lié à un espace de noms XML identifié par cette URL :
http://schemas.microsoft.com/clr/nsassem/System.Data/System.Data%2C%20Version%3D1.0.3300.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db77a5c561934e089
Les consommateurs de cette définition WSDL sont censés comprendre la signification particulière de cette URL « bien connue » (il s''agit du nom fort en quatre parties d''un assembly d''exécution spécifique compris dans .NET Framework). Ce style de WSDL est idéal pour les clients mis en œuvre avec .NET Remoting car ils peuvent générer un assembly proxy contenant les informations adéquates pour le marshaling. Cependant, pour les boîtes à outils d''autres Web Services (ASP.NET notamment) qui ne comprennent pas cette URL et s''attendent à trouver une définition de schéma pour le type DataSet, ce WSDL sera inutile.
La question reste donc posée : peut-on utiliser .NET Remoting pour construire des Web Services ? Oui, au sens strict du terme, c''est possible. Mais ceux qui n''utilisent pas les mécanismes de .NET Remoting seront-ils capables de les exploiter ? Peut-être, si vous prenez soin de restreindre votre point d''entrée à un minimum de types de données et de sémantique. Plus précisément, si vous souhaitez mettre en place une bonne interopérabilité avec les boîtes à outils d''autres Web Services, vous devez restreindre les paramètres aux types simples prédéfinis et à vos propres types de données (n''utilisez pas les types .NET Framework comme DataSet) et éviter les événements et les objets activés par les clients. En bref, si la portée est pour vous une question importante, vous devez vous restreindre aux fonctionnalités que les Web Services ASP.NET prennent en charge.
Mieux encore, utilisez les Web Services ASP.NET, c''est exactement pour cela qu''ils sont conçus.

Choix d'une architecture trois-tiers

L'objectif premier d'un système d'information quel qu'il soit est de permettre à plusieurs utilisateurs d'accéder aux mêmes informations. Pour cela il faut donc regrouper les informations utilisées par l'entreprise. En terme technique, cela se traduit par la centralisation des données au sein d'une base de données. L'évolution des systèmes d'information s'est donc basée sur une meilleure subdivision entre les tâches à réaliser pour permettre l'exploitation de ces données par les utilisateurs finaux. Ceci permet de structurer plus efficacement les informations ce qui entraîne à la fois une meilleure organisation de l'entreprise et une meilleure efficacité technique. Cette subdivision a été facilitée par l'avènement des technologies orientées objets qui s'appliquent aussi bien au modèle client-serveur qu'au modèle Internet. Ces technologies permettent une séparation entre les différents composants du système. Il devient alors possible de réaliser de nouvelles architectures permettant la mise à disposition des informations sous différentes formes tout en diminuant les temps de développement. Ces technologies permettent également de faire collaborer une grande diversité de systèmes. On parle alors d'architecture distribuée. Il est ainsi possible de présenter des données en provenance d'un mainframe mélangées à des données en provenance d'un SGBDR, le tout étant affiché dans un browser sur la même page HTML.

Trois tâches importantes

Tout système d'information nécessite la réalisation de trois groupes de fonctions: le stockage des données, la logique applicative et la présentation. Ces trois parties sont indépendantes les unes des autres: on peut ainsi vouloir modifier la présentation sans modifier la logique applicative. La conception de chaque partie doit également être indépendante, toutefois la conception de la couche la plus basse est utilisée dans la couche d'au dessus. Ainsi la conception de la logique applicative se base sur le modèle de données, alors que la conception de la présentation dépend de la logique applicative.

Stockage et accès aux données

Le système de stockage des données a pour but de conserver une quantité plus ou moins importantes de données de façon structurée. On peut utiliser pour cette partie des systèmes très variés qui peuvent être des systèmes de fichiers, des mainframes, des systèmes de bases de données relationnelles, etc... Le point commun entre toutes ces systèmes est qu'il permettent le partage des données qu'ils contiennent via un réseau. La méthode d'accès à ces données dépendra du type d'organisation de ces données. Dans le cas d'une base de données relationnelle, l'accès peut se faire par des API qui dépendent du langage et de l'environnement. Ainsi en JAVA l'accès se fait via JDBC, alors qu'en C++ il se fera à l'aide d'ODBC. Quel que soit l'API, le langage SQL est utilisé.
Logique applicative
La logique applicative est la réalisation informatique du mode de fonctionnement de l'entreprise. Cette logique constitue les traitements nécessaires sur l'information afin de la rendre exploitable par chaque utilisateur. Les utilisateurs peuvent avoir des besoins très variés et évolutifs. Il devient alors nécessaire de permettre l'évolution du système sans pour autant devoir tout reconstruire. Cette partie utilise les données pour les présenter de façon exploitable par l'utilisateur. Il convient donc de bien identifier les besoins des utilisateurs afin de réaliser une logique applicative utile tout en structurant les données utilisées.

Présentation
La présentation est la partie la plus immédiatement visible pour l'utilisateur. Elle a donc une importance primordiale pour rendre attrayante l'utilisation de l'informatique. Son évolution a été très importante depuis les débuts de l'informatique. Depuis les terminaux en mode texte connectés à des mainframes jusqu'au HTML de nos jours en passant par les applications graphiques développées en client serveur, il y a eu beaucoup de chemin parcouru. Différents types d'interfaces demeurent intéressantes. En effet l'ergonomie d'un site Intranet HTML n'est pas forcément idéal pour tous les types d'applications. Il peut être intéressant de proposer plusieurs types d'interface pour une seule logique applicative. Par exemple une entreprise disposant d'un site de commerce électronique peut proposer un accès à la liste de ses produits sur Internet en HTML mais disposer d'une interface d'administration réalisée à l'aide d'une applet graphique.

Architecture client-serveur

Les architectures client-serveur constituent une étape importante dans l'évolution des systèmes d'informations. Ce type d'architecture est constitué uniquement de deux parties: un client qui gère la présentation et la logique applicative, un serveur qui stocke les données de façon cohérente et gère éventuellement une partie de la logique applicative. L'interface entre ces deux parties est classiquement le langage SQL (dans sa version normalisé ou dans une version propriétaire). Dans ce type d'architecture on constate une certaine indépendance du client par rapport au serveur. La programmation du client peut s'effectuer sans se préoccuper de la mise en place de la base de données. En particulier, les questions concernant l'administration des données ne concerneront pas le développeur du client (dimensionnement des disques, répartition des données sur le système, optimisation des accès aux données, sauvegarde des données,...). Un des objectifs des architectures multi-tiers sera de généraliser ce type de fractionnement en éléments logiciels indépendants les uns des autres. La qualité de ce type d'architecture est basé sur deux technologies éprouvées: la notion de base de données relationnelle et le langage SQL. Toutefois on peut également constater deux inconvénients à cette technologie: elle possède une sécurité limitée et surtout son déploiement demeure long et laborieux.

Avantage: technologies éprouvées

Le modèle relationnel a été introduit par E. Codd en 1970. Il s'appuie sur des considérations théoriques formulées sous la forme de 12 règles formant le cahier des charges initial. Ce modèle est basé sur la notion de relation. Une relation est un ensemble de n-uplet (n est fixe) qui correspondent chacun à une propriété de l'objet à décrire. Ce modèle permet la gestion précise de contraintes d'intégrité qui garantissent la cohérence des données. Les systèmes de gestion de base de données relationnel (SGBDR) sont interfacés à l'aide d'un langage unique: le SQL (Structured Query Language). Ce langage permet d'effectuer l'ensemble des opérations nécessaires sur la base de données. Ce langage permet également la gestion de transaction. Une transaction est définie par quatre propriétés essentielles: Atomicité, Cohérence, Isolation et Durabilité (ACID). Ces propriétés garantissent l'intégrité des données dans un environnement multi-utilisateurs. L'Atomicité permet à la transaction d'avoir un comportement indivisible; soit toutes les modifications sur les données effectuées dans la transaction sont effectives, soit aucune n'est réalisée. On comprend l'intérêt de ce concept dans l'exemple simple d'une transaction débitant un compte A et créditant un autre compte B : il est clair que la transaction n'a de sens que si les deux opérations sont menées à leur terme; L'atomicité de la transaction garantit que la base de donnée passera d'un état cohérent à un autre état cohérent. La Cohérence des données de la base est donc permanente. L'Isolation des transactions signifie que les modifications effectuées au cours d'une transaction ne sont visibles que par l'utilisateur qui effectue cette transaction. Au cours de la transaction, l'utilisateur pourra voir des modifications en cours qui rendent la base apparemment incohérente, mais ces modifications ne sont pas visibles par les autres et ne le seront qu'à la fin de la transaction si celle-ci est correcte (elle ne rend pas la base incohérente). La Durabilité garanti la stabilité de l'effet d'une transaction dans le temps, même en cas de problèmes graves tel que la perte d'un disque. L'ensemble de ces notions sont à la base des systèmes d'information actuels. Les technologies supportant ces notions (en particulier les SGBDR) forment l'aboutissement des recherches des 30 dernières années. Des systèmes comme Oracle offrent désormais des performances intéressantes y compris sur de grosses bases de données. Ces performances ont été obtenues sans faire de compromis sur les concepts théoriques sur lesquels ils se basent (modèle relationnel). Ces systèmes servent donc tout naturellement de base aux futurs systèmes d'information utilisant les nouvelles technologies Internet.

Inconvénients

L'architecture client-serveur possède toutefois des inconvénients. Ce sont ces inconvénients qui poussent les entreprises à utiliser d'autres technologies. Les deux inconvénients principaux sont la difficulté à gérer correctement les questions de sécurité et le coût du déploiement. La sécurité d'un système en architecture client-serveur est gérée au niveau du SGBDR. Celui-ci contrôle l'accès aux données en attribuant des autorisations d'accès aux différents utilisateurs du système. Le problème vient du fait que cette attribution de droit ne peut pas tenir compte des spécificités du logiciel réalisé. Pour pouvoir gérer les droits d'accès de cette façon il faut accorder à chaque utilisateur des droits sur un grand nombre de tables, ce qui devient vite laborieux. En pratique il est souvent plus rapide de ne créer qu'un utilisateur sur le SGBDR avec lequel tous les utilisateurs se connectent. Cette approche ne permet aucune gestion de la sécurité. Il suffit de connaître le login et le mot de passe d'accès à la base pour accéder à l'ensemble des données sans aucune restriction. L'autre problème est souvent considéré comme beaucoup plus important par les entreprises car il est beaucoup plus visible. Il s'agit des durées et coûts de déploiement des logiciels. En effet un logiciel classique, développé en architecture client-serveur, nécessite une installation et une éventuelle configuration sur chaque poste utilisateur. Le déplacement d'un technicien coûte déjà très cher aux entreprises. Mais ce qui reste le plus laborieux est la nécessité de mettre à jour régulièrement le logiciel. Dans une architecture client-serveur, chaque mise à jour du logiciel nécessite un nouveau déploiement accompagné de nombreux coûts.

Architecture trois-tiers

Le principe d'une architecture trois-tiers est relativement simple: il consiste à séparer la réalisation des trois parties vues précédemment (stockage des données, logique applicative, présentation). Nous avons déjà pu entrevoir la possibilité de séparer la conception de ces trois subdivisions, ici il s'agit de séparer leur implantation. Tout comme dans le client-serveur cette séparation signifie qu'il est possible de déployer chaque partie sur un serveur indépendant, toutefois cela n'est pas obligatoire. La mise en place de ce type d'architecture permet dans tous les cas une plus grande évolutivité du système. Il est ainsi possible de commencer par déployer les deux serveurs sur la même machine, puis de déplacer le serveur applicatif sur une autre machine lorsque la charge devient excessive. Les éléments permettant la réalisation classique d'un système en architecture trois tiers sont les suivants:
système de base de donnée relationnel (SGBDR) pour le stockage des données
serveur applicatif pour la logique applicative
navigateur web pour la présentation Il est important de remarquer que l'essentiel du travail de développement sera implanté au niveau du serveur applicatif. Le SGBDR nécessitera un travail d'administration surtout dans le cas d'une quantité de données importante. Le travail de conception de la base de donnée sera la pierre angulaire du système. En effet l'ensemble du développement s'appuiera sur cette conception. Le navigateur web nécessitera la programmation de code spécifique permettant de gérer l'affichage par ce navigateur. Ce code sera placé sur le serveur applicatif pour permettre une mise à jour sans nécessiter de nouveaux déploiements.

Avantages de cette architecture

Cette architecture se développe actuellement au sein des entreprises grâce aux nombreux avantages qu'elle présente. Malgré la différence évidente entre une architecture trois tiers et un système client-serveur (l'apparition d'un serveur pour la logique applicative), le système reste basé sur les technologies éprouvées détaillées précédemment (aspect relationnel et transaction). La logique applicative est déplacée au niveau du serveur d'application mais reste programmée à l'aide des mêmes technologies liées aux bases de données relationnelles. En particulier l'utilisation du langage SQL reste jusqu'à présent la solution la plus intéressante au niveau de la qualité logicielle. Elle présente à la fois une grande fiabilité, une bonne disponibilité, une excellente évolutivité,... Toutefois il faut prendre en compte deux facteurs importants: d'une part le choix du SGBDR (ils n'ont pas tous les même qualités), d'autre part la qualité des programmes utilisant la base de données (aussi bien au niveau de la conception que de la programmation). L'avantage principal d'une architecture multi-tiers est la facilité de déploiement. L'application en elle même n'est déployée que sur la partie serveur (serveur applicatif et serveur de base de données). Le client ne nécessite qu'une installation et une configuration minime. En effet il suffit d'installer un navigateur web compatible avec l'appication pour que le client puisse accéder à l'application, ce navigateur étant par ailleurs souvent installé par défaut sur toutes les machines. Cette facilité de déploiement aura pour conséquence non seulement de réduire le coût de déploiement mais aussi de permettre une évolution régulière du système. Cette évolution ne nécessitera que la mise à jour de l'application sur le serveur applicatif. Ceci est très important car cette évolutivité est un des problèmes majeurs de l'informatique. Le troisième avantage est l'amélioration de la sécurité. Dans un système client-serveur tous les clients accédaient à la base de donnnées ce qui la rendait vulnérable. Avec une architecture multi-tiers l'accès à la base n'est effectué que par le serveur applicatif. Ce serveur est le seul à connaitre la façon de se connecter à cette base. Il ne partage aucune des informations permettant l'accès aux données, en particulier le login et le password de la base. Il est alors possible de gérer la sécurité au niveau de ce serveur applicatif, par exemple en maintenant la liste des utilisateurs avec leurs mots de passe ainsi que leurs droits d'accès aux fonctions du système. On peut même améliorer encore la sécurité par la mise en place d'une architecture réseau interdisant totalement l'accès au serveur de base de données pour les utilisateurs finaux. La mise en place de firewall correctement configuré permettra ceci. Dans le cas de la mise en place d'un workflow au sein de l'entreprise Kallisto, l'avantage le plus intéressant est sans aucun doute l'évolutivité du système. En effet les besoins actuels sont relativement vastes, toutefois la réalisation totale semble relativement longue et difficile à réaliser d'un seul coup. De plus des problèmes risquent de nécessiter une mise à jour répétée du système. Un autre aspect intéressant est la possibilité d'utiliser le système en Extranet, ce qui chez Kallisto permettra de faciliter la communication entre le siège social situé à Lyon et l'agence de Paris.

Architecture multi-tiers

Nous avons vu ce qu'était une architecture trois-tiers, une architecture multi-tiers va plus loin dans le découpage de l'application sur différents serveurs. Une architecture multi-tiers est également appelé architecture distribuée du fait de la distribution des traitements et des données sur différents serveurs. Le découpage de base du système reste toujours le même: une partie gestion de données, une partie gestion de la logique applicative et bien entendu le client assurant la présentation. Toutefois les deux parties développées coté serveur vont pouvoir être déployées chacune sur plusieurs serveurs. L'objectif général de ce type d'architecture est de permettre l'évolutivité du système sous plusieurs aspects: la quantité de données stockée, la disponibilité du serveur, le nombre d'utilisateurs,... Il faut également bien comprendre qu'un système conçu en architecture multi-tiers n'est pas forcément déployé sur plusieurs machines dès le départ. Toutefois son mode de programmation doit permettre de modifier le déploiement du système en cours d'exploitation par un administrateur. Le développeur doit donc rendre le système indépendant du serveur sur lequel il s'éxécute. Il existe deux types de répartition possibles dans une architecture distribuée. Il est possible de répartir les données et de répartir la logique applicative. Chacune de ces deux répartitions permet de résoudre des problèmes de natures différentes. Elles peuvent donc être mises en place soit séparément soit en parallèle sur le même système.

Répartition des données sur différents serveurs

Il s'agit d'utiliser plusieurs sources de données dans une même application. Chaque source possède sa propre structure de données. Chaque serveur de données peut être géré de façon très différente. Toutefois une interface de programmation commune à toutes les sources doit pouvoir exister. Il peut exister des relations entre les données des différents serveurs, il sera alors nécessaire de gérer des transactions distribuées entre des différents serveurs de données. Cette répartition de données correspond à la notion de base de données distribués. Les bases de données distribuées permettent de résoudre deux types de problèmes. La première est la performance du système: la répartition des données permet d'augmenter la disponibilité des données. Toutefois il est nécessaire de bien penser cette répartition afin de ne pas démultiplier le nombre de transactions distribuées nécessaires. Ceci aurrait pour effet de diminuer la performance plus que de l'augmenter. Le deuxième type de problèmes est la réutilisation des systèmes éxistants. En effet de nombreux systèmes informatiques stockent actuellement une grande quantité de données. Toutefois ces systèmes ne sont pas toujours bien coordonnés entre eux. Ceci risque d'entraîner des redondances dans les données et des incohérences entre plusieurs sources de données. L'objectif est donc de réutiliser ces systèmes dans une même application afin de restructurer le système d'information sans pour autant repartir de zéro (ce qui est non seulement un non sens mais est aussi impossible). Les systèmes réutilisés sont bien souvent hétéroclites (mainframe, SGBDR,...) et nécessitent d'être réunis en utilisant diverses technologies (moniteurs transactionnels, serveurs d'applications,...).

Répartition de la logique applicative

La répartition de la logique applicative permet de distribuer les traitements sur différentes machines. Cette distribution est facilitée par l'utilisation de la programmation orientée objet et plus particulièrement de ce qu'on appelle les composants. Un composant possède entre autre la caractèristique d'être accessible à travers le réseau. Un composant peut ainsi être instantié puis utilisé au travers du réseau. Il est également possible de trouver un serveur permettant l'utilisation d'un composant, ce qui permet une forte évolutivité ainsi qu'une résistance aux pannes importantes (le service sera toujours disponible sur un serveur même si une machine tombe en panne). La réalisation de ce type de répartition nécessite l'utilisation de technologies spécifiques. D'une part il faut permettre la communication entre les différents éléments de l'application (RMI), d'autre part le déploiement et l'évolution du sytème doivent pouvoir être assurés (JNDI + fichiers XML). Certaines technologies proposent une architecture cohérente pour la mise en place des différentes technologies intervenant sur un système distribué (EJB). Les buts recherchés lors de la mise en place de ce type d'architecture sont la performance, l'évolutivité, la maintenabilité...

jeudi, février 02, 2006

Menus en ASP.NET 2.0

Ce tutoriel a été réalisé à partir de la Beta 2 de Visual Studio 2005PrésentationLe nouveau Framework comprend un certain nombre de nouveaux contrôles dont le contrôle Menu, disponible via la boîte à outils, son focntionnement se distigue en :

Fonctionnement statique

Ce contrôle peut être utilisé de manière statique, c’est à dire que l’on peutrenseigner tous les éléments le constituant via des items exemple :

Fonctionnment dynamique

Le meilleur moyen de maîtriser nos données était de pouvoir faire appel à une DataSource (une source de données).Grâce à la propriété Data de l’XmlDataSource le problème fut résolu :) ex :
Dim ds As MonDataSetType = New MonDataSetType()
ds.ReadXmlSchema("C:\chemin\MonSchema.xsd")
ds.ReadXml("C:\chemin\monFichier.xml")
XmlDataSource1.Data = ds.GetXml()
XmlDataSource1.DataBind()Une fois que nous avions trouvé comment raccorder un dataset à notreXmlDataSource, il ne nous restait plus qu’à créer un schéma xml correspondant aumenu hiérarchique attendu.
Pour plus d''infos voici une documentation téléchargable : http://hoshimi.codes-sources.fr/divers/ASP_NET_2_Menu.pdf

.Net 2.0 & Active directory

Au cours de cet article, nous allons voir comment interagir avec l''annuaire Active Directory de Microsoft grâce au Framework .Net, en effet, ce dernier présente une base solide en la matière depuis sa version 1.1, mais offre de grandes nouveautés dans sa version 2.0, notamment grâce à son namespace System.DirectoryServices.ActiveDirectory

Présentation des namespaces AD du Framework

Namespace System.DirectoryServicesCe namespace était déjà présent dans le Framework 1.1, mais il à évolué dans la version 2.0. Il permet d''accéder au service d''annuaire Active Directory par l''intermédiaire des ADSI (Active Directory Service Interfaces). Ce namespace contient une classe DirectoryEntry et DirectorySearcher qui vont respectivement vous permettre d''accéder à des objets dans l''annuaire et d''y effectuer des recherches. Pour pouvoir utiliser correctement ces différentes classes vous devez connaître au minimum les rudiments de la syntaxe des espaces de noms LDAP, sans quoi vous aurez du mal à accéder à vos différents objets, mais pas de panique vous allez voir que c''est assez simple et très loin d''être insurmontable.
Pour simplifier, ce namespace vous permet de gérer (lecture, ajout, suppression, modification...) les ressources de votre réseau et de les localiser dans l''annuaire.
Namespace System.DirectoryServices.ActiveDirectoryCe namespace mérite que l''on s''y attarde un peu plus et cela pour deux raisons : c''est une nouveauté du Framework .Net 2.0 et surtout il fait le bonheur des administrateurs systèmes souhaitant des applications de gestion de leur infrastructure Active Directory. Tout d''abord, comme son nom l''indique, cet espace de nom est dédié aux interactions de haut niveau avec le célèbre service d''annuaire de Microsoft. Grâce à un nombre très important de classes vous pouvez accéder à Active Directory au plan physique et logique. Vous pouvez accéder directement aux concepts de forêt, des domaines, des contrôleurs de domaine, des partitions, du schéma, du catalogue global, des sous réseaux, des sites... et je pourrais encore continuer la liste, ce namespace est simplement impressionnant, les spécialistes d''Active Directory, au travers de ces quelques lignes doivent déjà entrevoir les possibilités faramineuses (non, non je n''exagère pas) que nous laisse entrevoir cette nouveauté de la version 2.0 du Framework .Net.
Peut-être que tous ces concepts et ces explications vous semblent un peu théoriques, voyons donc maintenant quelles peuvent en être les applications concrètes.

Etablir une connexion avec l''annuaire :

Pour nous connecter à Active Directory, nous allons utiliser la classe DirectoryEntry qui permet d''accéder à un objet dans l''annuaire. Pour nous connecter à un objet dans l''annuaire, il suffit de fournir son nom unique LDAP, ex :
Dim monEntry As New DirectoryEntry("LDAP://" & cheminLdapConteneur, monUsername, monPassword, AuthenticationTypes.Secure)

Récupération des membres d''un groupe

Comme vous le savez déjà certainement, Active Directory permet de créer des groupes (de sécurité ou de distribution) qui contiennent d''autres objets comme des comptes utilisateurs ou des comptes d''ordinateurs par exemple. L''avantage principal de l''utilisation des groupes est qu''ils permettent de centraliser et de regrouper des objets afin d''en faciliter l''administration, mais là n''est pas le thème de cet article donc je n''entrerai pas plus dans les détails. Voyons comment récupérer par le code la liste des utilisateurs contenus dans un groupe donné.
La démarche va être la suivante :
Connexion à l''annuaire Active Directory Récupération de la propriété " members " d''un groupe Boucle pour parcourir la propriété " members " Renvoi du résultat Exemple montrant comment lister les utilisateurs du groupe "Utilisateurs du domaine" : Lister les membres d''un groupe : Public Function listeMembresGroupe(ByVal cheminLdapGroupe As String, _ ByVal monUsername As String, _ ByVal monPassword As String) As ArrayList
'' Instanciation de la liste qui va contenir le résulat Dim maListeMembres As New ArrayList
Try
'' Groupe dont les membres sont à lister Dim monGroupe As New DirectoryEntry("LDAP://" & cheminLdapGroupe, _ monUsername, monPassword, AuthenticationTypes.Secure)
Dim unMembre As New Object() '' Ajoute chaque membre trouvé à notre ArrayList à retourner For Each unMembre In monGroupe.Properties("member") maListeMembres.Add(unMembre.ToString) Next
monGroupe.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
'' Retourne la liste des membres du groupe Return maListeMembres
End Function
Télécharger la documentation compléte sur cette article : ftp://ftp-developpez.com/webman/articles/dotnet/activedirectory/vbnet/ActiveDirectory.pdf

.Net 2.0 & Active directory

Au cours de cet article, nous allons voir comment interagir avec l''annuaire Active Directory de Microsoft grâce au Framework .Net, en effet, ce dernier présente une base solide en la matière depuis sa version 1.1, mais offre de grandes nouveautés dans sa version 2.0, notamment grâce à son namespace System.DirectoryServices.ActiveDirectory

Présentation des namespaces AD du Framework

Namespace System.DirectoryServicesCe namespace était déjà présent dans le Framework 1.1, mais il à évolué dans la version 2.0. Il permet d''accéder au service d''annuaire Active Directory par l''intermédiaire des ADSI (Active Directory Service Interfaces). Ce namespace contient une classe DirectoryEntry et DirectorySearcher qui vont respectivement vous permettre d''accéder à des objets dans l''annuaire et d''y effectuer des recherches. Pour pouvoir utiliser correctement ces différentes classes vous devez connaître au minimum les rudiments de la syntaxe des espaces de noms LDAP, sans quoi vous aurez du mal à accéder à vos différents objets, mais pas de panique vous allez voir que c''est assez simple et très loin d''être insurmontable.
Pour simplifier, ce namespace vous permet de gérer (lecture, ajout, suppression, modification...) les ressources de votre réseau et de les localiser dans l''annuaire.
Namespace System.DirectoryServices.ActiveDirectoryCe namespace mérite que l''on s''y attarde un peu plus et cela pour deux raisons : c''est une nouveauté du Framework .Net 2.0 et surtout il fait le bonheur des administrateurs systèmes souhaitant des applications de gestion de leur infrastructure Active Directory. Tout d''abord, comme son nom l''indique, cet espace de nom est dédié aux interactions de haut niveau avec le célèbre service d''annuaire de Microsoft. Grâce à un nombre très important de classes vous pouvez accéder à Active Directory au plan physique et logique. Vous pouvez accéder directement aux concepts de forêt, des domaines, des contrôleurs de domaine, des partitions, du schéma, du catalogue global, des sous réseaux, des sites... et je pourrais encore continuer la liste, ce namespace est simplement impressionnant, les spécialistes d''Active Directory, au travers de ces quelques lignes doivent déjà entrevoir les possibilités faramineuses (non, non je n''exagère pas) que nous laisse entrevoir cette nouveauté de la version 2.0 du Framework .Net.
Peut-être que tous ces concepts et ces explications vous semblent un peu théoriques, voyons donc maintenant quelles peuvent en être les applications concrètes.

Etablir une connexion avec l''annuaire :

Pour nous connecter à Active Directory, nous allons utiliser la classe DirectoryEntry qui permet d''accéder à un objet dans l''annuaire. Pour nous connecter à un objet dans l''annuaire, il suffit de fournir son nom unique LDAP, ex :
Dim monEntry As New DirectoryEntry("LDAP://" & cheminLdapConteneur, monUsername, monPassword, AuthenticationTypes.Secure)

Récupération des membres d''un groupe

Comme vous le savez déjà certainement, Active Directory permet de créer des groupes (de sécurité ou de distribution) qui contiennent d''autres objets comme des comptes utilisateurs ou des comptes d''ordinateurs par exemple. L''avantage principal de l''utilisation des groupes est qu''ils permettent de centraliser et de regrouper des objets afin d''en faciliter l''administration, mais là n''est pas le thème de cet article donc je n''entrerai pas plus dans les détails. Voyons comment récupérer par le code la liste des utilisateurs contenus dans un groupe donné.
La démarche va être la suivante :
Connexion à l''annuaire Active Directory Récupération de la propriété " members " d''un groupe Boucle pour parcourir la propriété " members " Renvoi du résultat Exemple montrant comment lister les utilisateurs du groupe "Utilisateurs du domaine" : Lister les membres d''un groupe : Public Function listeMembresGroupe(ByVal cheminLdapGroupe As String, _ ByVal monUsername As String, _ ByVal monPassword As String) As ArrayList
'' Instanciation de la liste qui va contenir le résulat Dim maListeMembres As New ArrayList
Try
'' Groupe dont les membres sont à lister Dim monGroupe As New DirectoryEntry("LDAP://" & cheminLdapGroupe, _ monUsername, monPassword, AuthenticationTypes.Secure)
Dim unMembre As New Object() '' Ajoute chaque membre trouvé à notre ArrayList à retourner For Each unMembre In monGroupe.Properties("member") maListeMembres.Add(unMembre.ToString) Next
monGroupe.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
'' Retourne la liste des membres du groupe Return maListeMembres
End Function
Télécharger la documentation compléte sur cette article : ftp://ftp-developpez.com/webman/articles/dotnet/activedirectory/vbnet/ActiveDirectory.pdf

Création d'une application Service Windows

Dans cet article, nous allons voir comment créer un service windows, ajouter un programme d'installation, l'installer et verfier son fonctionnement

Préparation du service :
Avant toute chose nous devons renommer notre service de Service1 en SMemoire pour nous permettre de mieux l''identifier.

puis, modifier la propriété AutoLog a true, ce qui nous permettra d'inscrire tous les événements liés au service, dans les journaux système.

Pour finir ouvrez la section #region du code, et dans la procédure Shared Sub Main() Modifier la ligne :

ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}

Par :
ServicesToRun = New System.ServiceProcess.ServiceBase() {New SMemoire}

Ajout du programme d''installation

Un service Windows est une application de type service s''exécutant généralement en tache de fond. C'est donc un exécutable dont l'exécution est assuré en grande partie par Windows.Pour que Windows puisse l'exécuter, il doit être installé, c'est ce que nous allons voir dans ce cours.Activer la fenêtre de conception SMemoire.vb [Desing] puis cliquer sur F4 pour activer sa fenêtre des propriétés. Au bas de la fenêtre cliquez sur le lien " Ajouter le programme d'installation " , qui va nous permettre de définir les actions liées à l'installation de notre service. Deux composant sont alors créer, l''un pour les paramètres de l''installation du processus, l'autre pour les paramètres liés a l''installation du service.

Dans les propriétés du ServiceInstaller1, il faut vérifier :
la propriété ServiceName qui doit se nommer Smemoire (le nom du service a installer)
la propriété StartType qui doit être en Automatique (le type de démarrage)
Dans les propriété du ServiceProcessInstaller1 verifier :
la propriété Account qui doit être sur LocalSystem
Ouvrez les propriété de votre projet (projet --> propriété de Smemoire), dans Objet de démarrage et sélectionner SMemoire.Vous pouvez maintenant générer et sauvegarder votre projet, vous vous retrouver avec un fichier ServiceMemoire.exe dans le répertoire bin de votre projet.

Installation et désinstallation du service

La création de notre service est réalisé, il ne nous reste plus qu'à le faire prendre en compte par le système d'exploitation en l'installant.C'est tres simple a réaliser, positionnez vous avec votre explorateur dans le répertoire c:\Windows\Micorsoft.net\Framework\v1.0.xxxx (xxxx represente la version de votre Framework) et lancer le fichier InstallUtil.exe , cela va vous ouvir une fenetre de commande, il ne vous reste plus qu'à taper :InstallUtil " C:\projets\ServiceMemoire\bin\ServiceMemoire.exe "Le service va s''installer automatiquement.Pour desinstaller le programme il suffira de refaire la même procedure mais de taper :InstallUtil /u " C:\projets\ServiceMemoire\bin\ServiceMemoire.exe "

Installation et désinstallation du service

Pour verifier que notre service soit bien installé, il suffit d'ouvir la console de management des Services de Windows et regarder que notre service est bien present.Pour ce faire, Cliquer sur demarrer --> panneau de configuration --> Outils d''administration --> Services , puis rechercher votre service (SMemoire)
Notre service est bien présent, l''installation c'est dérouler correctement, nous allons maintenant tester le service en lui meme.

Envoi et réception de mails avec le framework 2.0

La gestion de l'envoi et de la réception de mails sont des besoins récurrents dans bon nombre d'applications. Le but de cet article est donc de vous présenter les nombreuses possibilités offertes par .Net

I -Envoi de mail

Dans cette première partie, nous allons voir ce que j'estime être le plus intéressant avec les mails: l'envoi. L'envoi de mail peut être utilisé de diverses manières: notification, envoi de rapport ou mail "personnel". L'équipe Microsoft a bien tenu compte de ce besoin et ils ont développé pour nous, deux nouveaux espaces de nom qui facilitent l'envoi de mail. Ces deux espaces de noms sont System.Net.Mail et System.Net.Mime qui permettent respectivement, de créer un objet Mail (MailMessage) et de gérer les entêtes MIME des mails.
Commençons donc par créer l'objet représentant notre mail:
Création de l’objet représentant le mail MailMessage monMail;
Cette classe contient un nombre conséquent de propriétés permettant de personnaliser le mail comme vous le feriez avec votre client de messagerie. Commençons par définir l’auteur du mail. Ceci se réalise à l’aide de la classe MailAdress.
Ajout de l’auteur du mail monMail.From = new MailAddress("modd_hay@hotmail.com");
La deuxième chose à définir sont le(ou les) destinataire(s).
Ajout de destinataires // ajout de deux destinataires principauxmonMail.To.Add(new MailAddress("modd_hay@hotmail.com "));monMail.To.Add(new MailAddress("modd_hay@hotmail.com ")); // ajout d’un destinataire CCmonMail.Cc.Add(new MailAddress("modd_hay@hotmail.com ")); // ajout d’un destinataire CCImonMail.CCi.Add(new MailAddress("modd_hay@hotmail.com "));
Comme vous le voyez, il est très facile de spécifier les destinataires du mail et surtout d’en définir plusieurs tout en spécifiant à quel groupe de réception ils appartiennent.
Spécifions maintenant le sujet(titre) du mail ainsi que son contenu
Ajout du sujet et du contenu monMail.Subject = "Mail de test";monMail.Body = "Hello les gens";
Votre mail est alors prêt à être envoyé: ce que nous allons faire tout de suite. Créeons un objet SMTPClient et configurons le:
Création/Personnalisation du SMTPClient // création du SMTPClientSmtpClient client = new SmtpClient(); // définition du serveur smtpclient.Host = "smtp.developpez.com"; // définition des login et pwd si smtp sécuriséclient.Credentials = new NetworkCredential("pharaonix", "mon mot de passe");
Il ne nous reste plus qu’une chose à faire: envoyer le mail.
Envoi du mail client.Send(monMail);
Je vous avais promis précédemment qu’il était possible d’inclure des pièces jointes à vos mails. vous allez constater que leur utilisation est tout aussi simple. Chaque pièce jointe est représentée par un objet Attachment
Pièces jointes // création de la pièce jointeAttachment maPieceJointe = new Attachment(@"c:/fichier.zip"); // chemin de la pièce jointe // ajout de la pièce jointe au mailmonMail.Attachments.Add(maPieceJointe); /*// suppression de la pièce jointemonMail.Attachments.RemoveAt(0);*/
Vous ne pouvez qu’admirer le travail fait par les développeurs Microsoft et apprécier la facilité avec laquelle vous pourrez dorénavant envoyer n’importe quel type de mail dans vos applications .Net

II - Réception de mail

Je n’ai pas trouvé sur la MSDN de classe spécifique pour la réception de mail, mais il existe des composants tiers sur le net (payants) qui proposent des classes facilitant cette tâche. Nous allons voir comment se passer de ces classes tierces et comment recevoir les mails le plus simplement possible.
La récupération de mail en POP3 se fait à l’aide d’une communication client/serveur. En effet, le client(logiciel de messagerie) et le serveur s’envoient une suite bien définie de commandes et/ou de réponses correspondantes.

Qui Action Client connexion avec le socket Serveur +OK connected to pop3 Client USER pharaonix Serveur +OK name is a valid mailbox Client PASS mon_mot_de_passe Serveur +OK user exist with that password Client STAT Serveur +OK [Nombre de Messages] [Taille] Client RETR [Numero Du Mail] Serveur +OK Données du mail (entête+contenu) Client QUIT Serveur +OK
Notez que j’indique le serveur renvoie "+OK" ainsi qu’un message de réponse. Dans le cas d’une erreur, le serveur renverra "-ERR" et un message de réponse. Toutes ces commandes, ce fonctionnement, cette nomenclature de messages, sont définis dans la norme rfc1939 ou la norme rfc1725.
Et dans la pratique? Et bien, nous allons devoir suivre ces étapes une par une.
II-1 Connexion
Commençons par nous connecter au serveur:
private TcpClient monSocket;monSocket = new TcpClient("pop.developpez.com", 110); // 110 est le port par défaut pour les serveurs POP3
La communication client/serveur se fera à l’aide d’un flux (stream):
private NetworkStream monStream;
Nous initialisons notre Stream à l’aide du stream de notre socket. Profitons en pour créer un objet StreamReader qui nous permettra de lire le contenu de notre Stream, tout du long de la communication avec le serveur POP3. C’est dans ce dernier que nous recevrons les messages de réponse du serveur ainsi que les mails.
// initialisation du StreammonStream = monSocket.GetStream(); // création du streamreaderprivate StreamReader monStreamReader;monStreamReader = new StreamReader(monStream);
Maintenant que nous avons une "connexion" avec le serveur, nous allons nous y authentifier. Nous allons préparer les commandes et les envoyer au serveur.
// Préparation de la commande USER avec le nom d’utilisateurString Commande = "user " + _Login + "\r\n"; // Envoi de la commande au serveurByte[] bCommande = System.Text.ASCIIEncoding.ASCII.GetBytes(Commande);monStream.Write(bCommande, 0, bCommande.Length);
Lorsque nous nous sommes connecté au serveur, celui nous a renvoyé la réponse suivante: "+OK connected to pop3 on 1012", puis nous lui avons envoyé la commande USER à laquelle il a répondu (car l’utilisateur existe vraiment): +OK name is a valid mailbox. L’étape suivante consiste à envoyer le mot de passe du compte pour être reconnu et authentifié sur le serveur:
// Préparation de la commande PASS avec le mot de passe utilisateurString Commande = "pass " + _Pwd + "\r\n"; // Envoi de la commande au serveurByte[] bCommande = System.Text.ASCIIEncoding.ASCII.GetBytes(Commande);monStream.Write(bCommande, 0, bCommande.Length);
Si le login et surtout le mot de passe sont corrects, alors vous recevrez le message: "+OK user exist with that password". Vous pouvez dorénavant travailler comme bon vous semble avec le serveur.
RéceptionNous allons maintenant aborder la réception des mails. Celle-ci se fait en deux principales étapes. La première consiste à demander au serveur s’il contient des mails. Nous pouvons la réaliser à l’aide de la commande STAT, puis nous parserons la réponse du serveur
/// /// Récupère le nombre de mails sur le serveur, en parsant la réponse du serveur du type "+OK Nbre Taille"/// /// /// /// private int NombreDeMessages(int mode, params int[] index){ String sOutStream = ""; if (mode == 1) sOutStream = "stat\r\n"; else if (mode == 2) sOutStream = "list " + index[0].ToString() + "\r\n"; String[] tempS ={ "0" }; try { EnvoiCommande(sOutStream); String tempLog = sr.ReadLine(); tempS = tempLog.Split(‘ ‘); } catch (Exception e) { MessageBox.Show("erreur" + e); } return int.Parse(tempS[1]);}
La méthode précédente nous renvoyait donc le nombre de mails qui se trouvent sur le serveur et la taille totale prise par ceux-ci, puis nous la parsions pour ne récupérer que le nombre de mails
Avant de démarrer, il faut bien prendre en compte le fait suivant : le traitement de réception peut être assez complexe, pour les raisons suivantes : - même s’il existe des normes, tous les mails ne les respectent pas forcément, - les possibilités de contenu d’un mail sont très vastes. Ne vous étonnez donc pas que votre réception de mail ne soit pas aussi parfaite que celle d’un client de messagerie comme Microsoft Outlook ou Thunderbird.
Dans cette partie, je vais donc vous présenter une manière simple de récupérer les mails et les informations associées. Il serait bien entendu possible de développer cette approche d’une manière beaucoup plus exhaustive, mais ce n’est pas le but de cette présentation.
Nous allons maintenant recevoir les mails. Cela ne se fait qu’en les recevant un par un, en les "appelant" par leur numéro.