View
4
Download
0
Category
Preview:
Citation preview
1
La plateforme La plateforme Microsoft .NETMicrosoft .NET
-- Ce cours : Ce cours : \\\\santiagosantiago\\Cours et TPs 2005Cours et TPs 2005--20062006\\Cedrik Cedrik PoireyPoirey\\MS.NETMS.NET
-- Installation Installation VisualVisual Studio .NET : Studio .NET : \\\\santiagosantiago\\installsinstalls\\allall
-- Compte MSN Cedrik : Compte MSN Cedrik : mrow_monacomrow_monaco@@hotmail.comhotmail.com
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
2
HistoriqueHistorique
.NET ???.NET ???
XMLXMLWeb ServicesWeb Services
20002000
VisualVisualStudioStudio.NET.NET
IE, IISIE, IISVisual StudioVisual Studio
19901990GUIGUI
19811981PCPC
19951995InternetInternet
MSMS--DOSDOSBASICBASIC
WindowsWindowsVisual BASICVisual BASIC
Visual Studio.NET,.NET Framework
.NET ServicesExpérienceUtilisateur
.NET Devices,
.NET Enterprise Servers
.NET ???.NET ???
3
La plate forme .NETLa plate forme .NET
Experiences Experiences utilisateurutilisateur
Web services Web services & .NET & .NET MyServicesMyServices
PC &PC &périphériquespériphériques
ServeursServeurs
Application
Application
Center 2000
Center 2000
Enterprise ServersEnterprise Servers
BizTalk
BizTalk
Server 2000
Server 2000
Commerce
Commerce
Server 2000
Server 2000
Exchange
Exchange
2000
2000
SQL Server
SQL Server
2000
2000
ISA Server
ISA Server
2000
2000
Mobile
Mobile
Inform
ation
Inform
ation
2001 Server
2001 Server
Host
Host
Integration
Integration
Server 2000
Server 2000
VisualS
tudio.NE
TV
isualStudio.N
ET
.NE
T F
ramew
ork.N
ET
Fram
ework
Authentication
Notification
Storage
Windows 2000 ServerWindows 2000 Server
.NET ???.NET ???
.NET Clients.NET Clients
�� WindowsWindows--poweredpowered�� SupporteSupporte XML et les services WebXML et les services Web�� FonctionneFonctionne en en autonomeautonome ouou en en
mode mode connectéconnecté
.NET ???.NET ???
4
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
ProtocolesProtocoles Internet Internet ouvertsouverts
SOAP, SCL, DISCO, HTTPSOAP, SCL, DISCO, HTTP
SMTP, XML, WAP, XSDSMTP, XML, WAP, XSD
SchématisationSchématisation de .NETde .NET
VotreVotre application application et et votrevotre service Webservice Web
.NET .NET FrameworkFramework
Windows®Windows® CE, CE, Me, 2000, .NETMe, 2000, .NET
Opérations
Opérations
ClientsClientsfinauxfinaux
Autres Autres applications applications utilisant utilisant
votre servicevotre service
OrchestrationOrchestration
VosVos services services internesinternes
.NET Enterprise .NET Enterprise ServersServers
Building Block Building Block ServicesServices
Services Web publicsServices Web publics
Visual Visual Studio® Studio® .NET.NET
FRAMEWORKFRAMEWORK
5
Windows Services COM+
Common Language Runtime
Bibliothèque de classes de base
Données et XML
ASP .NET
FrameworkFramework, langages et outils, langages et outils
Windows Forms
Common Language Specification
VB C++® C#®V
isualStudio .N
ET
JScript® …
FRAMEWORKFRAMEWORK
VueVue d’ensembled’ensemble
Power & Power & SimplicitySimplicity
Standard Standard ProtocolsProtocols
Web Web ServicesServices
ComponentsSecurity
TransactionsXML
Abilities
Rich Rich ClientsClients
Web Web BrowsersBrowsers
Mobile Mobile DevicesDevices
XMLXML
Relational Access Relational Access
AnyAnyDatabaseDatabase
FRAMEWORKFRAMEWORK
6
ObjectifsObjectifs
�� Intégration de l’existantIntégration de l’existant�� Multiples langages de programmation (vingtaine)Multiples langages de programmation (vingtaine)�� Interopérabilité COMInteropérabilité COM�� Compatibilité «Compatibilité « side by sideside by side » (2 versions d’un même composant)» (2 versions d’un même composant)
�� Développement d’applications simplifiéDéveloppement d’applications simplifié�� Modèle de programmation unifiéModèle de programmation unifié�� Elever le niveau d’abstraction (=>Elever le niveau d’abstraction (=>modèlemodèle objetobjet))
�� classe, interface, héritage, propriété, event, constructor, excclasse, interface, héritage, propriété, event, constructor, exception…eption…�� Elimination complète de la plomberie COM Elimination complète de la plomberie COM
�� Bibliothèque de classe riche et extensibleBibliothèque de classe riche et extensible�� Intégration native des standards WebIntégration native des standards Web
�� Environnement d’exécution robuste et sécuriséEnvironnement d’exécution robuste et sécurisé�� Code managé: (GC, Type Code managé: (GC, Type SafeSafe, , SelfSelf--configuring, dynamically configuring, dynamically
tuningtuning))�� Runtime Runtime SecuritySecurity (unification du mode de traitement des erreurs)(unification du mode de traitement des erreurs)
�� Déploiement et administration simplifiésDéploiement et administration simplifiés�� AssembliesAssemblies ((versioningversioning, , securitésecurité, , evolutionevolution des des DLLsDLLs))�� Installation Installation ZeroZero--ImpactImpact ((XcopyXcopy, pas d’enregistrement), pas d’enregistrement)
FRAMEWORKFRAMEWORK
Unifier les Unifier les ModèlesModèles de de ProgrammationProgrammation
Windows API
.NET Framework
API cohérente quelque soit le langage ou le type d’application
ASP
Stateless,Mixe de code dansDes pages HTML
MFC/ATL
Héritage,Contrôle,
performance
VB Forms
RAD,Composition,
Delegation
FRAMEWORKFRAMEWORK
7
Intégration native de XMLIntégration native de XML
DonnéesDonnées
SchémaSchéma
ServicesServices
InvocationInvocation
WebWeb
XMLXML
XSDXSD
WSDLWSDL
SOAPSOAP
Concepts Concepts ApplicatifsApplicatifs FrameworkFramework
ObjetsObjets
ClassesClasses
MéthodesMéthodes
AppelsAppels
.NET .NET FrameworkFramework fournit une mise en fournit une mise en correspondance bidirectionnellecorrespondance bidirectionnelle
FRAMEWORKFRAMEWORK
Common Language RuntimeCommon Language Runtime
Base Class LibraryBase Class Library
ADO.NET and XMLADO.NET and XML
ASP.NETASP.NETWeb Forms Web ServicesWeb Forms Web Services
WindowsWindowsFormsForms
CompositionCompositionFRAMEWORKFRAMEWORK
8
CommonCommon LanguageLanguage RuntimeRuntime
�� CommonCommon LanguageLanguage::�� Ouvert à différentes syntaxes (CLS)Ouvert à différentes syntaxes (CLS)�� FrameWorkFrameWork Objet pour le développeurObjet pour le développeur
�� RuntimeRuntime�� Une exécution managée et contrôléeUne exécution managée et contrôlée�� ManagedManaged Code, Code, ManagedManaged MemoryMemory�� Services ( XML, DATA, WEB …)Services ( XML, DATA, WEB …)
�� Basé sur :Basé sur :�� Win32, XML, SOAPWin32, XML, SOAP�� Inter opère avec DCOM/COM, COM+1.0Inter opère avec DCOM/COM, COM+1.0
FRAMEWORKFRAMEWORK
..NET SyntaxesNET Syntaxes
�� La plateLa plate--forme .Net est indépendante du langageforme .Net est indépendante du langage�� Tous les langages accèdent aux services fournis par la CLRTous les langages accèdent aux services fournis par la CLR
�� Commun Langage Spécification (CLS)Commun Langage Spécification (CLS)�� Spécification d’écriture des compilateurs «Spécification d’écriture des compilateurs « syntaxiquessyntaxiques »»�� Chaque langage utilise et étend le Chaque langage utilise et étend le frameworkframework .Net.Net�� Les langages .Net sont Les langages .Net sont interopérablesinteropérables..
Common Language SpecificationCommon Language Specification
VBVB C++C++ C#C# J#J# ……
FRAMEWORKFRAMEWORK
9
Base Class Base Class LibraryLibrary
System
Globalization
Diagnostics
Configuration
Collections
Resources
Reflection
Net
IO
Threading
Text
ServiceProcess
Security RuntimeInteropServices
Remoting
Serialization
System.Data
Design
ADO
SQLTypes
SQL
System.Xml
XPath
XSLT Serialization
System.WinForms
Design ComponentModel
System.Drawing
Imaging
Drawing2D
Text
Printing
System.Web
Configuration SessionState
Caching Security
ServicesDescription
Discovery
Protocols
UIHtmlControls
WebControls
FRAMEWORKFRAMEWORK
TheThe bigbig picturepicture
Base Class Library
Common Language Specification
Common Language Runtime
ADO.NET(Données & XML)
VB C++ C#
Visual S
tudio.NE
T
ASP.NETWeb Forms &Web Services
J# …
Windows Forms
Soumis à L’ECMA
FRAMEWORKFRAMEWORK
10
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime
�� WebcastWebcast�� Un peu de codeUn peu de code�� GCGC
�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
11
Simplification du développementSimplification du développement
�� Moins d'écriture, davantage de réutilisationMoins d'écriture, davantage de réutilisation�� FrameworkFramework étendu et homogèneétendu et homogène�� Classes et interfacesClasses et interfaces
�� Disparition de toute la "plomberie"Disparition de toute la "plomberie"�� MétadonnéesMétadonnées�� ProxiesProxies transparentstransparents�� Gestion de la mémoireGestion de la mémoire
�� Un ensemble d'outils de support WYSIWYG Un ensemble d'outils de support WYSIWYG non négligeablenon négligeable�� Concepteurs et assistantsConcepteurs et assistants�� Débogueurs Débogueurs �� Générateurs de profilsGénérateurs de profils
Pour une productivité accrue.Pour une productivité accrue.
CLR/ObjectifsCLR/Objectifs
Simplification et sécurisation Simplification et sécurisation accrue du déploiementaccrue du déploiement
�� Aucun enregistrement, installation à zéro impactAucun enregistrement, installation à zéro impact�� Déploiement avec XCOPY, téléchargement incrémentielDéploiement avec XCOPY, téléchargement incrémentiel
�� Versions Versions côtecôte--àà--côtecôte des composants partagésdes composants partagés�� Stockage des versions au moment de la compilationStockage des versions au moment de la compilation�� Stratégie d'administration au moment de l'exécutionStratégie d'administration au moment de l'exécution
�� Stratégie de sécurité basée sur la preuveStratégie de sécurité basée sur la preuve�� Basée sur l'identité et l'utilisateur du codeBasée sur l'identité et l'utilisateur du code�� Origine du code (emplacement)Origine du code (emplacement)�� Éditeur (clé publique)Éditeur (clé publique)
Pour enfin mettre un terme à l'"enfer des DLL"Pour enfin mettre un terme à l'"enfer des DLL" !!
CLR/ObjectifsCLR/Objectifs
12
ÉvolutivitéÉvolutivité
�� Des périphériques intelligents aux parcs WebDes périphériques intelligents aux parcs Web�� Gestion automatique de la mémoireGestion automatique de la mémoire
�� AutoconfigurationAutoconfiguration�� Paramétrage dynamiqueParamétrage dynamique
�� Pool de Pool de threadsthreads�� Gestion asynchrone des communicationsGestion asynchrone des communications
�� Accès distant aux objetsAccès distant aux objets�� ÉvénementsÉvénements
�� Version pour périphérique intelligentVersion pour périphérique intelligent�� Systèmes d'exploitation en temps réel (RTOS, Systèmes d'exploitation en temps réel (RTOS, RealReal--TimeTime OperatingOperating SystemSystem))
�� Mêmes outils utilisés pour le bureauMêmes outils utilisés pour le bureau
Pour un meilleur rapport performance/coût.Pour un meilleur rapport performance/coût.
CLR/ObjectifsCLR/Objectifs
Fonctionnalité multi langageFonctionnalité multi langage
�� Système de type communSystème de type commun�� Orienté objetOrienté objet�� Prise en charge des langages procédurauxPrise en charge des langages procéduraux�� Possibilité de prise en charge des langages fonctionnelsPossibilité de prise en charge des langages fonctionnels
�� La CLS guide la conception du La CLS guide la conception du frameworkframework�� Ensemble de règles permettant une utilisation étendueEnsemble de règles permettant une utilisation étendue�� L'ensemble de la fonctionnalité .NET L'ensemble de la fonctionnalité .NET FrameworkFramework
est disponibleest disponible
�� Plus de 20Plus de 20 langages étudiéslangages étudiés�� La La plupartplupart sont des "consommateurs CLS"sont des "consommateurs CLS"�� Beaucoup étendent la CLSBeaucoup étendent la CLS
Un large éventail d'outils pour vos travaux.Un large éventail d'outils pour vos travaux.
CLR/ObjectifsCLR/Objectifs
13
Les langages disponiblesLes langages disponibles�� PerlPerl�� PythonPython�� CobolCobol�� HaskellHaskell�� MLML�� JscriptJscript�� AdaAda�� APLAPL�� EiffelEiffel�� PascalPascal�� FortranFortran
ManagedManaged C++C++Visual BasicVisual BasicC#C#SmallTalkSmallTalkOberonOberonSchemeSchemeMercuryMercuryOzOzObjective Objective CamlCaml……
CLR/ObjectifsCLR/Objectifs
Unification des typesUnification des types
CLR/ObjectifsCLR/Objectifs
14
Vue d’ensembleVue d’ensemble
Class Loader
IL to NativeCompilers
CodeManager
GarbageCollector
Security Engine Debug Engine
Type Checker Exception Manager
Thread Support COM Marshaler
Base Class Library Support
CLR/ObjectifsCLR/Objectifs
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
15
MétadonnéesMétadonnées
�� Informations indépendantes du langage, Informations indépendantes du langage, et plus encoreet plus encore
�� Élément clé pour un modèle de programmation simplifiéÉlément clé pour un modèle de programmation simplifié�� Automatiquement générées par les compilateursAutomatiquement générées par les compilateurs
�� Stockées avec le code dans le fichier exécutableStockées avec le code dans le fichier exécutable�� Stockées au format binaireStockées au format binaire
�� Requises pour l'exécution (obligatoires)Requises pour l'exécution (obligatoires)�� Convertibles en et à partir du schéma XML Convertibles en et à partir du schéma XML
et des bibliothèques de types COMet des bibliothèques de types COM
CLR/Conception & compilationCLR/Conception & compilation
Que contiennent les Que contiennent les métadonnéesmétadonnées ??
�� Description de l'unité de déploiement (Description de l'unité de déploiement (assemblyassembly))�� IdentitéIdentité : nom, version, culture, [clé publique]: nom, version, culture, [clé publique]�� Quels sont les types exportésQuels sont les types exportés ??�� Quels sont les Quels sont les assemblysassemblys dont elle dépenddont elle dépend ??�� Quelles sont les autorisations de sécurité requises pour l'exécuQuelles sont les autorisations de sécurité requises pour l'exécutiontion ??
�� Description des typesDescription des types�� Nom, visibilité, classe de base, interfaces implémentéesNom, visibilité, classe de base, interfaces implémentées�� Membres (méthodes, champs, propriétés, événements, Membres (méthodes, champs, propriétés, événements,
types imbriqués)types imbriqués)
�� Attributs personnalisésAttributs personnalisés�� Définis par l'utilisateur (auteurDéfinis par l'utilisateur (auteur ?)?)�� Définis par le compilateur (Définis par le compilateur (constconst) ) �� Définis par le Définis par le frameworkframework ((DllImportDllImport, , ObsoleteObsolete))
CLR/Conception & compilationCLR/Conception & compilation
16
MétadonnéesMétadonnées : création et : création et utilisationutilisation
MétadonnéesMétadonnées(et code)(et code)
DébogueurDébogueur
GénérateurGénérateurde schéma de schéma
GénérateurGénérateurde profilsde profils
CompilateursCompilateurs
Générateur Générateur proxyproxy
ExplorateurExplorateurde typesde types
CompilateurCompilateur
CodeCodesourcesource
Codage XMLCodage XML(SDL ou SUDS)(SDL ou SUDS)
SérialisationSérialisation
ConcepteursConcepteurs
RéflexionRéflexion
Exportateur TLBExportateur TLB
CLR/Conception & compilationCLR/Conception & compilation
Les compilateurs utilisent les Les compilateurs utilisent les métadonnéesmétadonnées
�� Pour l'importation de types de données Pour l'importation de types de données interlangagesinterlangages�� Émettent des Émettent des métadonnéesmétadonnées dans le code de sortiedans le code de sortie
�� Décrivent les types définis et utilisésDécrivent les types définis et utilisés�� Enregistrent les Enregistrent les assemblysassemblys externes référencésexternes référencés�� Enregistrent les informations de versionEnregistrent les informations de version
�� Les attributs personnalisés peuvent être utilisés Les attributs personnalisés peuvent être utilisés �� ObsolèteObsolète�� Conformité CLSConformité CLS�� Compilés pour le déboguageCompilés pour le déboguage�� Marqueurs spécifiques au langageMarqueurs spécifiques au langage
CLR/Conception & compilationCLR/Conception & compilation
17
D'autres outils utilisent les D'autres outils utilisent les métadonnéesmétadonnées
�� Explorateurs de types et d'objetsExplorateurs de types et d'objets�� Classes de Classes de réflexionréflexion�� ConcepteursConcepteurs�� ImportateurImportateur et et exportateurexportateur TLBTLB�� OutilsOutils de documentationde documentation�� Débogueurs et générateurs de profilsDébogueurs et générateurs de profils
CLR/Conception & compilationCLR/Conception & compilation
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
18
AssemblyAssembly
�� UnitéUnité de de déploiementdéploiement�� Un seul ou plusieurs fichiers, indépendants du packagingUn seul ou plusieurs fichiers, indépendants du packaging�� AutodescriptiveAutodescriptive par le biais des par le biais des métadonnéesmétadonnées (manifeste)(manifeste)
�� Unité de versioningUnité de versioning�� StockéeStockée par le par le compilateurcompilateur�� Stratégie par application et par ordinateurStratégie par application et par ordinateur
�� AméliorationAmélioration de la de la sécuritésécurité�� Des autorisations sont attribuées aux Des autorisations sont attribuées aux assemblysassemblys�� Les méthodes peuvent demander la preuve qu'une autorisation a Les méthodes peuvent demander la preuve qu'une autorisation a
été accordée à toute la chaîne d'appelété accordée à toute la chaîne d'appel
�� Les Les assemblysassemblys servent d'intermédiaires aux importations et servent d'intermédiaires aux importations et exportationsexportations�� Les types référencés sont relatifs à l'Les types référencés sont relatifs à l'assemblyassembly
CLR/DéploiementCLR/Déploiement
ApplicationsApplications
�� Les applications sont des unités configurablesLes applications sont des unités configurables�� Un assembly Un assembly ouou plusplus�� Fichiers ou données spécifiques aux applicationsFichiers ou données spécifiques aux applications
�� L'emplacement des L'emplacement des assemblysassemblys est déterminé en fonction deest déterminé en fonction de ::�� Leur nom logique (nom, éditeur, version et culture) Leur nom logique (nom, éditeur, version et culture) �� L'application qui les chargeL'application qui les charge
�� Les applications peuvent avoir des versions privées des Les applications peuvent avoir des versions privées des assemblysassemblys�� La stratégie de version peut être définie La stratégie de version peut être définie
par applicationpar application
CLR/DéploiementCLR/Déploiement
19
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
ModèleModèle d'exécutiond'exécution
VBVB VCVC C#C# ……
ILILCodeCodenatifnatif
CompilateurCompilateurJIT standardJIT standard
CodeCodenatifnatif
NGENNGEN
Common Language RuntimeCommon Language Runtime
CLR/ExécutionCLR/Exécution
20
Code Code managémanagé
�� Le code Le code managémanagé fournitfournit ::�� Les Les métadonnéesmétadonnées décrivant les donnéesdécrivant les données�� L'emplacement des références aux objets L'emplacement des références aux objets �� Les tables de gestion des exceptionsLes tables de gestion des exceptions
�� Donc, le Donc, le runtimeruntime peut fournirpeut fournir ::�� La gestion des exceptionsLa gestion des exceptions�� La sécuritéLa sécurité�� La gestion automatique de la durée de vieLa gestion automatique de la durée de vie�� Le débogage et la génération de profilsLe débogage et la génération de profils
CLR/ExécutionCLR/Exécution
Flux de contrôle du Flux de contrôle du runtimeruntime
ChargeurChargeurde classesde classes
Compilateur du code Compilateur du code IL en code natifIL en code natif
ProcesseurProcesseurSystèmeSystème
de de sécuritésécurité
GestionnairesGestionnairesde codede code
CodeCodenatifnatif
managémanagé
AssemblyAssembly
Premier Premier appelappel de de méthodeméthode
Première Première référenceréférenceau typeau type
SupportSupportd'exécutiond'exécution
CLR/ExécutionCLR/Exécution
21
CompilationCompilationdu code IL en code natifdu code IL en code natif
�� JIT "standard"JIT "standard"�� Génère du code natif optimiséGénère du code natif optimisé�� Inclut une vérification du code en langage intermédiaire (IL, Inclut une vérification du code en langage intermédiaire (IL, IntermediateIntermediate LanguageLanguage))
�� Génération de code au moment de l'installation (NGEN)Génération de code au moment de l'installation (NGEN)�� Exécutée au moment de l'installationExécutée au moment de l'installation�� Réduit le temps de démarrageRéduit le temps de démarrage�� Vérifications de version du code natif et retour Vérifications de version du code natif et retour
au au runtimeruntime JIT en cas d'erreurJIT en cas d'erreur
CLR/ExécutionCLR/Exécution
DonnéesDonnées managéesmanagées
�� Disposition fournie par le CLR pour Disposition fournie par le CLR pour gerergerer certaines parties de certaines parties de la mémoirela mémoire�� Généralement automatiqueGénéralement automatique�� Les Les métadonnéesmétadonnées peuventpeuvent spécifierspécifier ::
�� L'ordreL'ordre�� La compressionLa compression�� La disposition La disposition expliciteexplicite
�� Durée de vie gérée par le CLR (GC)Durée de vie gérée par le CLR (GC)�� JeuJeu de travail de travail compactécompacté�� DonnéesDonnées déplacéesdéplacées�� Références aux objets mises à jourRéférences aux objets mises à jour�� Erreurs de page prises en chargeErreurs de page prises en charge
CLR/ExécutionCLR/Exécution
22
Appel de code non managéAppel de code non managé
CodeCodenatifnatif
CompilateurCompilateurJIT standardJIT standard
CodeCodenatifnatif
Common Language RuntimeCommon Language Runtime
Non Non managémanagé
ManagéManagé
CLR/ExécutionCLR/Exécution
TroisTrois mécanismesmécanismes
�� COM COM InteropInterop�� Identité des objets conservée (Identité des objets conservée (IUnknownIUnknown))�� Interfaces COM sélectionnées automatiquement créées Interfaces COM sélectionnées automatiquement créées
�� PInvokePInvoke ((Platform InvokePlatform Invoke))�� Appel des points d'entrée DLL statiquesAppel des points d'entrée DLL statiques
�� IJW (IJW (It Just WorksIt Just Works))�� Pas de marshalingPas de marshaling
CLR/ExécutionCLR/Exécution
23
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
CommonCommon LanguageLanguage RuntimeRuntime
�� ObjectifsObjectifs�� Conception & compilationConception & compilation�� DéploiementDéploiement�� ExécutionExécution�� A propos du A propos du GarbageGarbage CollectorCollector�� RésuméRésumé
CLR/SommaireCLR/Sommaire
24
RésuméRésumé
�� Simplification...Simplification...�� Du développement, du déploiement Du développement, du déploiement
et de l'administrationet de l'administration
�� Code Code multilangagemultilangage, sécurisé et mobile, sécurisé et mobile
�� Tout le code est compilé avant exécutionTout le code est compilé avant exécution�� Pas votre machine virtuelle conventionnellePas votre machine virtuelle conventionnelle !!
�� Interopérabilité totale avec le code non managéInteropérabilité totale avec le code non managé�� Services COM, COM+Services COM, COM+ 1.0, Microsoft Win32®, 1.0, Microsoft Win32®,
vos DLLvos DLL
�� ÉvolutivitéÉvolutivité : des périphériques intelligents : des périphériques intelligents aux parcs Webaux parcs Web
CLR/RésuméCLR/Résumé
CommonCommon LanguageLanguage RuntimeRuntime
�� Questions ? Remarques ?Questions ? Remarques ?
�� Principaux concepts :Principaux concepts :�� MétadonnéesMétadonnées�� Multi langages (héritage)Multi langages (héritage)�� Aucun enregistrement (déploiement par simple copie)Aucun enregistrement (déploiement par simple copie)�� Composants Composants sideside by by sideside�� Flux de contrôle du Flux de contrôle du runtimeruntime à l’exécutionà l’exécution�� InteropInterop totaletotale
�� Un peu de code…Un peu de code…
25
C# & ILC# & IL
�� Utilisation du désassembleur ILDASM pour retrouver le code Utilisation du désassembleur ILDASM pour retrouver le code IL d’un IL d’un assemblyassembly ((exeexe ou ou dlldll).).
�� --> Il existe des projets plus ou moins évolués de > Il existe des projets plus ou moins évolués de désassembleur IL désassembleur IL --> C#> C#
�� --> Et donc des > Et donc des obfuscateursobfuscateurs .NET.NET
GarbageGarbage CollectorCollector
�� ManagedManaged HeapHeap (tas managé)(tas managé)�� Créer au démarrage du Créer au démarrage du processprocess
�� ( + ( + heapheap dédié aux larges dédié aux larges objectobject, > 20000 bytes), > 20000 bytes)�� Réservation d’une zone contiguëRéservation d’une zone contiguë
�� Gestion d’un pointeur sur le prochain : «Gestion d’un pointeur sur le prochain : « NextObjPtrNextObjPtr »»
Objet CObjet BObjet A
NextObjPtr
ManagedHeap
~Aussi rapide qu’une allocation « Stack »• Incrémenter le pointeur de heap• Copie du buffer et appel constructeur
En fin de heap :• Allocation/réservation (win32)• Garbage Collection
• Travail par génération pour limiter le travail
Le managed heap connaît a tout moment le type d’un objet
CLR/GCCLR/GC
26
GarbageGarbage CollectorCollector
�� Optimisation par Gestion de GénérationsOptimisation par Gestion de Générations�� Postulats :Postulats :
�� Plus les objets sont récents, plus courte est leur vie.Plus les objets sont récents, plus courte est leur vie.�� Plus un objet est vieux, plus sa vie est longue.Plus un objet est vieux, plus sa vie est longue.�� Les objets les plus récents tendent a avoir plus d’échanges et sLes objets les plus récents tendent a avoir plus d’échanges et sont ont
sollicités plus fréquemment, «sollicités plus fréquemment, « en mêmeen même » temps.» temps.�� Compacter une portion de Compacter une portion de heapheap est plus rapide que de tout est plus rapide que de tout
compactercompacter�� Rechercher a «Rechercher a « regrouperregrouper » les objets» les objets
�� Bénéficier le plus possible du cache processeurBénéficier le plus possible du cache processeur�� Limiter les accès «Limiter les accès « lointainslointains »»
�� Test sur P 200 Mhz : 1 milliseconde pour un GC de génération 0 Test sur P 200 Mhz : 1 milliseconde pour un GC de génération 0 (full GC)(full GC)
�� Objectif, «Objectif, « No more No more timetime thanthan an an ordinaryordinary page page faultfault »»
CLR/GCCLR/GC
GarbageGarbage CollectorCollector
Allocation Allocation d’objetsd’objets
DéréférencementDéréférencement
MarkMark
Compact Compact
Nouvelle allocation Nouvelle allocation d’objetsd’objets
Generation 1Generation 1 Generation 0Generation 0
CLR/GCCLR/GC
27
GarbageGarbage CollectorCollector
�� La génération 2 est l’étape ultime du cycle de collecte des La génération 2 est l’étape ultime du cycle de collecte des objets .NETobjets .NET
�� Un cycle de collecte ne se déclenche que lorsque la Un cycle de collecte ne se déclenche que lorsque la génération 0 est pleine, et ne s’intéresse qu’aux génération 0 est pleine, et ne s’intéresse qu’aux générations qui permettront de satisfaire les besoins générations qui permettront de satisfaire les besoins immédiats en allocation mémoireimmédiats en allocation mémoire
�� Aucun moyen programmatique d’inhiber le GCAucun moyen programmatique d’inhiber le GC
�� On peut forcer le déclenchement du GC : On peut forcer le déclenchement du GC : System.GC.CollectSystem.GC.Collect() ou () ou System.GC.CollectSystem.GC.Collect(n)(n)(pour les tâches qui crée des objets et qui ne doivent pas (pour les tâches qui crée des objets et qui ne doivent pas être interrompue)être interrompue)
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
28
C# et VB.NETC# et VB.NET
�� VB .NET VB .NET –– Les nouveautésLes nouveautés�� C# .NET C# .NET –– Bref aperçuBref aperçu
Langages/SommaireLangages/Sommaire
Le langage VB .NETLe langage VB .NET
Langages/Nouveautés VBLangages/Nouveautés VB
�� Langage réellement objetLangage réellement objet�� Support de l’héritageSupport de l’héritage�� Support du Support du multimulti--threadingthreading�� Création de services NTCréation de services NT�� Extension : .Extension : .vbvb�� Compilateur : Compilateur : vbc.exevbc.exe
29
La syntaxe VB .NET (1)La syntaxe VB .NET (1)Langages/Nouveautés VBLangages/Nouveautés VB
�� PropriétéPropriété�� Déclaration de propriété («Déclaration de propriété («readread--onlyonly» ou «» ou «writewrite--onlyonly» possible)» possible)�� MotMot--clé : clé : PropertyProperty
�� ConstructeursConstructeurs�� Déclaration d’un constructeurDéclaration d’un constructeur�� Utilisation d’une classe implémentant un constructeurUtilisation d’une classe implémentant un constructeur�� MotMot--clé : clé : NewNew
�� OverloadingOverloading�� Possibilité de fournir plusieurs signatures à une même méthodePossibilité de fournir plusieurs signatures à une même méthode
�� HéritageHéritage�� Héritage d’une autre classe (multi langage)Héritage d’une autre classe (multi langage)�� MotMot--clés : clés : InheritsInherits ; ; MybaseMybase
�� OverridingOverriding�� Modification du comportement d’une méthode d’une classe dont Modification du comportement d’une méthode d’une classe dont
on hériteon hérite�� MotMot--clcléé : : OverridesOverrides ; ; OverridableOverridable
La syntaxe VB .NET (2)La syntaxe VB .NET (2)�� EventsEvents
�� Permet la communication entre classesPermet la communication entre classes�� Principe d’abonnementPrincipe d’abonnement�� MotMot--clcléés : s : EventEvent ; ; RaiseEventRaiseEvent ;; AddHandlerAddHandler ;; HandlesHandles�� Exemple :Exemple :
�� Gestion d’erreurGestion d’erreur�� Gestion par exceptionGestion par exception�� On oublie les «On On oublie les «On errorerror GOTO»GOTO»�� MotMot--clés : clés : TryTry ; ; catchcatch ; ; throwthrow
Langages/Nouveautés VBLangages/Nouveautés VB
Client Serveur
Quotation
Le client s'abonne à l'événement NouveauCours
Le client déclenche l'acquisition par Demarrer()
Le serveur notifie le client à chaque nouvelle quotation
30
C# et VB.NETC# et VB.NET
�� VB .NET VB .NET –– Les nouveautésLes nouveautés�� C# .NET C# .NET –– Bref aperçuBref aperçu
Langages/SommaireLangages/Sommaire
C# C# -- La syntaxeLa syntaxe
�� Le meilleur du C++ et de VBLe meilleur du C++ et de VB
�� Développement RAD grâce à Développement RAD grâce à VisualVisual Studio.NetStudio.Net
�� Langage utilisé à + de 80% pour développer le .Net Langage utilisé à + de 80% pour développer le .Net FrameworkFramework
�� Soumis à l’ECMASoumis à l’ECMA
Langages/C#Langages/C#
31
C# et le C# et le frameworkframework
�� C#, comme tous les langages s'appuyant sur la plateforme C#, comme tous les langages s'appuyant sur la plateforme .Net, peut bénéficier de tous les services offerts par le .NET .Net, peut bénéficier de tous les services offerts par le .NET Framework.Framework.
�� Il est impératif de regarder dans le détail les services Il est impératif de regarder dans le détail les services proposés par ce proposés par ce frameworkframework
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
32
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
33
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
34
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
35
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
36
Langages/C#Langages/C#
C#.NET C#.NET –– La base en C#La base en C#
Langages/C#Langages/C#
37
Langages/C#Langages/C#
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
38
VisualVisual Studio .NETStudio .NET
�� Evolution de Evolution de VisualVisual Basic et Basic et VisualVisual C++C++�� IDE unifié pour les langages .NET (C#, VB, C++, J#)IDE unifié pour les langages .NET (C#, VB, C++, J#)
�� Simplification des procédures de déboguageSimplification des procédures de déboguage
�� Fonctionnalités multiplesFonctionnalités multiples�� Personnalisation complète de l’environnementPersonnalisation complète de l’environnement�� Navigateur multifonction intégré : web, Navigateur multifonction intégré : web, msms--helphelp, code source, , code source,
formsforms……�� Nombreux assistants de génération de codeNombreux assistants de génération de code
�� Quelques photos d’écrans…+ lien utile :Quelques photos d’écrans…+ lien utile :http://support.microsoft.com/default.aspx?scid=kb;FR;324775http://support.microsoft.com/default.aspx?scid=kb;FR;324775
VS .NET/SommaireVS .NET/Sommaire
39
VISUAL STUDIO 2005VISUAL STUDIO 2005
40
PAUSEPAUSE
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
41
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
Objectifs (1)Objectifs (1)
�� Amélioration des performancesAmélioration des performances�� code compilé, services de mises en cachecode compilé, services de mises en cache
�� Prise en charge d'un outil de haute tenuePrise en charge d'un outil de haute tenue�� IDE WYSIWYG, déploiement automatiqueIDE WYSIWYG, déploiement automatique
�� Puissance et souplessePuissance et souplesse�� basé sur la «plateforme» CLR, multi langagebasé sur la «plateforme» CLR, multi langage
�� SimplicitéSimplicité�� séparation interface/logique ; services du CLR (GC, séparation interface/logique ; services du CLR (GC, refref.).)
�� Gestion aiséeGestion aisée�� configuration hiérarchique basé sur du texteconfiguration hiérarchique basé sur du texte�� déploiement par simple copie, pas de redémarrage du serveurdéploiement par simple copie, pas de redémarrage du serveur
ASP .NET/IntroductionASP .NET/Introduction
42
Objectifs (2)Objectifs (2)
�� Évolutivité et disponibilitéÉvolutivité et disponibilité�� processus supervisés et managés par le processus supervisés et managés par le runtimeruntime de ASP.NET de ASP.NET
(remplacement automatique si (remplacement automatique si pbpb))
�� Personnalisation et extensibilitéPersonnalisation et extensibilité�� possibilité d'étendre ou de remplacer n'importe quel possibilité d'étendre ou de remplacer n'importe quel soussous--
composantcomposant du du runtimeruntime de ASP.NET de ASP.NET
�� SécuritéSécurité�� l'authentification Windows intégréel'authentification Windows intégrée�� configuration par application configuration par application
ASP .NET/IntroductionASP .NET/Introduction
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
43
Web Web FormsForms .NET ???.NET ???
�� Modèle de programmation évolutif du CLR pour générer des Modèle de programmation évolutif du CLR pour générer des pages Web de manière dynamique.pages Web de manière dynamique.
�� Evolution logique de ASPEvolution logique de ASP
�� Améliorations :Améliorations :�� possibilité de créer et d'employer des contrôles d'interface possibilité de créer et d'employer des contrôles d'interface
utilisateur (réutilisation, reduction de la quantité de code)utilisateur (réutilisation, reduction de la quantité de code)�� organisation claire de la logique des pages pour éviter le code organisation claire de la logique des pages pour éviter le code
«spaghetti»)«spaghetti»)�� une prise en charge forte du design WYSIWYG des pages.une prise en charge forte du design WYSIWYG des pages.
ASP .NET/Web ASP .NET/Web FormsForms
Première page Web Première page Web FormsForms
�� Fichier texte portant une extension de nom de fichier .Fichier texte portant une extension de nom de fichier .aspxaspx
�� Déployée au sein d'une arborescence racine virtuelle IISDéployée au sein d'une arborescence racine virtuelle IIS
�� Compilée au 1er appel par le Compilée au 1er appel par le runtimeruntime d’d’ASP.NETASP.NET en une en une classe .NET (cette instance compilée est réutilisée par la classe .NET (cette instance compilée est réutilisée par la suite)suite)
�� Création à partir d’un simple fichier HTMLCréation à partir d’un simple fichier HTML
�� Démo (demo1.aspx)Démo (demo1.aspx)
ASP .NET/Web ASP .NET/Web FormsForms
44
Blocs de restitution <%%> ASPBlocs de restitution <%%> ASP
�� Compatibilité assurée avec les pages ASP existantesCompatibilité assurée avec les pages ASP existantes
�� Moyen puissant de manipulation, mais pas «propre» Moyen puissant de manipulation, mais pas «propre» (gestion de l’état de la page entre les (gestion de l’état de la page entre les alleraller--retoursretours au au serveur de manière personnalisée)serveur de manière personnalisée)
�� Démo (demo2.aspx)Démo (demo2.aspx)
ASP .NET/Web ASP .NET/Web FormsForms
Contrôles serveur ASP.NETContrôles serveur ASP.NET
�� En plus (remplacement) des blocs de codes <% %>En plus (remplacement) des blocs de codes <% %>
�� Balises personnalisées ou balises HTML intrinsèques Balises personnalisées ou balises HTML intrinsèques contenant une valeur d'attribut contenant une valeur d'attribut runatrunat="="serverserver""..
�� Au moment de l'exécution, ces contrôles serveur génèrent Au moment de l'exécution, ces contrôles serveur génèrent automatiquement du contenu HTML.automatiquement du contenu HTML.
�� Etat de la page géré automatiquement dans un champ de Etat de la page géré automatiquement dans un champ de formulaire <input type="formulaire <input type="hiddenhidden">">
�� Prise en charge de contrôles personnalisés plus riche (voir Prise en charge de contrôles personnalisés plus riche (voir <<aspasp::adrotatoradrotator> ou <> ou <aspasp::calendarcalendar>)>)
�� Démo (Démo (control.aspxcontrol.aspx))
ASP .NET/Web ASP .NET/Web FormsForms
45
Gestion des événementsGestion des événements
�� Modèle objet exposé par chaque contrôle serveurModèle objet exposé par chaque contrôle serveur�� propriétéspropriétés�� méthodesméthodes�� ÉvènementsÉvènements
�� Utilisation de ce modèle objet pour modifier proprement la Utilisation de ce modèle objet pour modifier proprement la pagepage
�� Démo…Démo… ((evenement.aspxevenement.aspx))
ASP .NET/Web ASP .NET/Web FormsForms
Contrôles serveur personnalisésContrôles serveur personnalisés
�� ASP.NET est fourni avec 45ASP.NET est fourni avec 45 contrôles serveur intégréscontrôles serveur intégrés ; ; immédiatement exploitables.immédiatement exploitables.
�� Possibilité pour les développeurs de rajouter leur propres Possibilité pour les développeurs de rajouter leur propres contrôles personnaliséscontrôles personnalisés
ASP .NET/Web ASP .NET/Web FormsForms
46
Validation de formulairesValidation de formulaires
�� Moyen convivial, mais puissant, de détecter les erreurs Moyen convivial, mais puissant, de détecter les erreurs dans les formulaires d'entréedans les formulaires d'entrée
�� Affichage de messagesAffichage de messages
�� Adaptation au clientAdaptation au client�� Client supérieur : Client supérieur : JavaScriptJavaScript et DHTMLet DHTML�� Client inférieur : allerClient inférieur : aller--retour sur le serveurretour sur le serveur
�� Démo (Démo (validator.aspxvalidator.aspx))
ASP .NET/Web ASP .NET/Web FormsForms
Méthode Méthode codecode--behindbehind
�� ASP.NET prend en charge deux méthodes de création des ASP.NET prend en charge deux méthodes de création des pages dynamiques pages dynamiques �� code de la page est physiquement déclaré au sein du fichier code de la page est physiquement déclaré au sein du fichier
..aspxaspx d'origine (exemples précédents)d'origine (exemples précédents)�� méthode méthode codecode--behindbehind : permet au code de la page d'être : permet au code de la page d'être
séparé plus proprement du contenu HTML dans un fichier séparé plus proprement du contenu HTML dans un fichier totalement distincttotalement distinct
�� Démo (intro13.aspx)Démo (intro13.aspx)
ASP .NET/Web ASP .NET/Web FormsForms
47
Données et liaison de donnéesDonnées et liaison de données
�� Contrôles serveurs Contrôles serveurs DataGridDataGrid et et DataListDataList pour afficher pour afficher simplement des résultats de requêtes.simplement des résultats de requêtes.
�� DataGridDataGrid + rapide à mettre en œuvre+ rapide à mettre en œuvre�� DataListDataList pour mieux pour mieux controlercontroler la structure et la présentationla structure et la présentation�� Alternative : le control Alternative : le control RepeaterRepeater qui permet de qui permet de controlercontroler la la
présentation au niveau du HTMLprésentation au niveau du HTML
�� Démo VS.NETDémo VS.NET
�� DatagridDatagrid remplacé par remplacé par GridViewGridView dans VS 2005dans VS 2005
ASP .NET/Web ASP .NET/Web FormsForms
RésuméRésumé�� Web Web FormsForms ASP.NET fournit un moyen aisé, mais puissant, de ASP.NET fournit un moyen aisé, mais puissant, de
générer une interface utilisateur Web dynamique. générer une interface utilisateur Web dynamique. �� Les pages Web Les pages Web FormsForms ASP.NET peuvent cibler n'importe quel ASP.NET peuvent cibler n'importe quel
navigateur client (aucun cookie ou bibliothèque de scripts n'estnavigateur client (aucun cookie ou bibliothèque de scripts n'estrequis). requis).
�� Les pages Web Les pages Web FormsForms ASP.NET assurent la compatibilité de la ASP.NET assurent la compatibilité de la syntaxe avec les pages ASP existantes. syntaxe avec les pages ASP existantes.
�� Les contrôles serveur ASP.NET permettent d'encapsuler Les contrôles serveur ASP.NET permettent d'encapsuler aisément des fonctionnalités courantes. aisément des fonctionnalités courantes.
�� ASP.NET est fourni avec 45ASP.NET est fourni avec 45 contrôles serveur intégrés. Les contrôles serveur intégrés. Les développeurs peuvent également utiliser des contrôles créés par développeurs peuvent également utiliser des contrôles créés par des tiers. des tiers.
�� Les contrôles serveur ASP.NET peuvent projeter Les contrôles serveur ASP.NET peuvent projeter automatiquement du code HTML de niveau supérieur et de automatiquement du code HTML de niveau supérieur et de niveau inférieur. niveau inférieur.
�� Les modèles ASP.NET permettent de personnaliser aisément Les modèles ASP.NET permettent de personnaliser aisément l'apparence des contrôles serveur de liste. l'apparence des contrôles serveur de liste.
�� Les contrôles de validation ASP.NET permettent d'effectuer Les contrôles de validation ASP.NET permettent d'effectuer aisément une validation des données déclarative sur le client ouaisément une validation des données déclarative sur le client oule serveur. le serveur.
ASP .NET/Web ASP .NET/Web FormsForms
48
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
Services Web .NETServices Web .NET�� Fichier texte .Fichier texte .asmxasmx semblable aux fichiers .semblable aux fichiers .aspxaspx plus :plus :
�� importation de l'espace de noms importation de l'espace de noms System.Web.ServicesSystem.Web.Services�� La classe est dérivée de la classe de base La classe est dérivée de la classe de base WebServiceWebService�� Chaque méthode devant être exposée doit avoir l’attribut Chaque méthode devant être exposée doit avoir l’attribut [[WebMethodWebMethod]] en C#, en C#, <<WebMethodWebMethod()>()> en en VisualVisual Basic ou Basic ou WebMethodAttributeWebMethodAttribute en en JScriptJScript, devant sa signature , devant sa signature
�� Ensemble d'outils et de code perfectionné pour l'utilisation Ensemble d'outils et de code perfectionné pour l'utilisation des services Webdes services Web�� WSDL.exe : outil de ligne de commande pour créer des classes WSDL.exe : outil de ligne de commande pour créer des classes
proxyproxy à partir de WSDLà partir de WSDL�� Assistants dans Assistants dans VisualVisual Studio pour ajouter des références WEBStudio pour ajouter des références WEB
�� A propos de l’A propos de l’interopinterop…(types communs, tableau, …(types communs, tableau, encodingencoding))
�� Démo…Démo…
ASP .NET/Services WebASP .NET/Services Web
49
TPTP
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
50
DéfinitionDéfinition
�� C’est la somme de tous les fichiers, pages, gestionnaires, C’est la somme de tous les fichiers, pages, gestionnaires, modules et codes exécutables pouvant être appelés ou modules et codes exécutables pouvant être appelés ou exécutés dans la portée d'un répertoire virtuel donné (et de exécutés dans la portée d'un répertoire virtuel donné (et de ses ses soussous--répertoiresrépertoires) sur un serveur d'application Web.) sur un serveur d'application Web.
�� S’exécute dans un domaine d'application .NET S’exécute dans un domaine d'application .NET FrameworkFrameworkuniqueunique�� Garantit l’isolation des classes et des variables statiquesGarantit l’isolation des classes et des variables statiques
�� Pool d'instances de Pool d'instances de HttpApplicationHttpApplication géré par ASP .NET géré par ASP .NET durant la vie de l’application. Une instance assignée durant la vie de l’application. Une instance assignée automatiquement à chaque automatiquement à chaque requèterequète HTTP.HTTP.
ASP .NET/Applications WebASP .NET/Applications Web
CréationCréation
�� Dans un répertoire virtuel de serveur web.Dans un répertoire virtuel de serveur web.
�� Simple copie d’au moins un fichier .Simple copie d’au moins un fichier .aspxaspx dans le répertoire.dans le répertoire.
�� Automatique depuis VS .NET lors de la création d’un projet Automatique depuis VS .NET lors de la création d’un projet de type «de type « Site webSite web »»
ASP .NET/Applications WebASP .NET/Applications Web
51
Durée de vie d'une applicationDurée de vie d'une application
�� Créée lors du lancement initial d'une demande au serveurCréée lors du lancement initial d'une demande au serveur
�� Création d’un pool d’instance de Création d’un pool d’instance de HttpApplicationHttpApplication, et , et déclenchement de l’événement déclenchement de l’événement Application_StartApplication_Start
�� Les instances de Les instances de HttpApplicationHttpApplication traitent les différentes traitent les différentes demandes jusqu’à la dernière instance, puis l’événement demandes jusqu’à la dernière instance, puis l’événement Application_EndApplication_End est déclenchéest déclenché
ASP .NET/Applications WebASP .NET/Applications Web
Utilisation du fichier Utilisation du fichier Global.asaxGlobal.asax
�� Situé à la racine de l'arborescence du répertoire virtuel de Situé à la racine de l'arborescence du répertoire virtuel de l’application Webl’application Web
�� Permet au développeur de créer la logique liée à la gestion Permet au développeur de créer la logique liée à la gestion des événements d'application de niveau supérieur des événements d'application de niveau supérieur ((Application_StartApplication_Start, , Application_EndApplication_End, , Session_StartSession_Start, , Session_EndSession_End ))
�� Contient toutes les variables globales de l’application. Contient toutes les variables globales de l’application. Attention ce n’est plus le cas avec VS 2005. Privilégiez la Attention ce n’est plus le cas avec VS 2005. Privilégiez la création d’une classe «création d’une classe « MySettingsMySettings » qui contiendra ces » qui contiendra ces variables.variables.
�� DémoDémo
ASP .NET/Applications WebASP .NET/Applications Web
52
Remarque sur les Remarque sur les threadsthreads multiplesmultiples
ASP .NET/Applications WebASP .NET/Applications Web
�� ASP.NET traite les demandes simultanément et plusieurs ASP.NET traite les demandes simultanément et plusieurs threadsthreads peuvent accéder à l'objet peuvent accéder à l'objet ApplicationApplication ; attention ; attention en cas d’utilisation d’objets avec une portée d’application !en cas d’utilisation d’objets avec une portée d’application !
�� Exemple dangereux :Exemple dangereux :<% <%
Application("Application("countercounter") = ") = CTypeCType(Application("(Application("countercounter") + 1, Int32) ") + 1, Int32)
%> %>
�� Code Code threadthread--safesafe ::<%<%
Application.LockApplication.Lock() ()
Application("Application("countercounter") = ") = CTypeCType(Application("(Application("countercounter") + 1, Int32) ") + 1, Int32)
Application.UnLockApplication.UnLock() ()
%> %>
RésuméRésumé
�� Les applications ASP.NET Les applications ASP.NET FrameworkFramework se composent de tous les se composent de tous les éléments situés sous un répertoire virtuel du serveur Web.éléments situés sous un répertoire virtuel du serveur Web.
�� Pour créer une application ASP.NET Pour créer une application ASP.NET FrameworkFramework, ajoutez des , ajoutez des fichiers à un répertoire virtuel du serveur Web. fichiers à un répertoire virtuel du serveur Web.
�� La durée de vie d'une application ASP.NET La durée de vie d'une application ASP.NET FrameworkFramework est est marquée par les événements marquée par les événements Application_StartApplication_Start et et Application_EndApplication_End..
�� Les applications ASP.NET Les applications ASP.NET FrameworkFramework peuvent définir dans le peuvent définir dans le fichier fichier Global.asaxGlobal.asax des gestionnaires d'événements et des objets des gestionnaires d'événements et des objets dont la portée est limitée à l'application ou à la session. dont la portée est limitée à l'application ou à la session.
�� L'accès à des objets ayant une portée d'application doit être L'accès à des objets ayant une portée d'application doit être sécurisé pour l'accès sécurisé pour l'accès multithreadmultithread. .
ASP .NET/Applications WebASP .NET/Applications Web
53
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
Services de cacheServices de cache
�� Pour de meilleures performances…Pour de meilleures performances…
�� Conservation des pages ou des données entre les Conservation des pages ou des données entre les demandes HTTP et les réutiliser sans avoir à les recréer.demandes HTTP et les réutiliser sans avoir à les recréer.
�� 3 types de mise en cache à disposition :3 types de mise en cache à disposition :�� mise en cache de sortiemise en cache de sortie�� mise en cache par fragmentmise en cache par fragment�� mise en cache de données mise en cache de données
ASP .NET/CacheASP .NET/Cache
54
Mise en cache de sortieMise en cache de sortie
�� Pour mettre la totalité d’une page en cache.Pour mettre la totalité d’une page en cache.
�� Pour qu'une réponse puisse être mise dans le cache de sortie, Pour qu'une réponse puisse être mise dans le cache de sortie, elle doit posséder une stratégie d'expiration/validation valide elle doit posséder une stratégie d'expiration/validation valide et être visible dans le cache public.et être visible dans le cache public.
�� Exemple :Exemple :
<%@ <%@ OutputCacheOutputCache DurationDuration="60" ="60" VaryByParamVaryByParam="none"%>="none"%><%@ <%@ OutputCacheOutputCache DurationDuration="60" ="60" VaryByParamVaryByParam="state" %> ="state" %>
ASP .NET/CacheASP .NET/Cache
Mise en cache par fragmentMise en cache par fragment�� Mise en cache des parties du contenu d'une page.Mise en cache des parties du contenu d'une page.
�� Les parties à mettre en cache doivent être désignée au Les parties à mettre en cache doivent être désignée au moyen d’un contrôle utilisateur avant de les marquer pour la moyen d’un contrôle utilisateur avant de les marquer pour la mise en cache à l'aide de la directive mise en cache à l'aide de la directive @ @ OutputCacheOutputCache..
�� Exemple :Exemple :<%@ <%@ RegisterRegister TagPrefixTagPrefix="="AcmeAcme" " TagNameTagName="Menu" ="Menu" SrcSrc="="Menu.ascxMenu.ascx" %>" %><html> <body> <html> <body> <<AcmeAcme:Menu :Menu CategoryCategory="="LeftMenuLeftMenu" " runatrunat==serverserver/> /> Hi, Hi, thethe timetime isis nownow: <%=: <%=NowNow%>%><<AcmeAcme:Menu :Menu CategoryCategory="="RightMenuRightMenu" " runatrunat==serverserver/>/></body> </html> </body> </html>
<%@ <%@ OutputCacheOutputCache DurationDuration="120" ="120" VaryByParamVaryByParam="none" %> ="none" %> <script <script languagelanguage="VB" ="VB" runatrunat==serverserver>>……</script></script>
<<aspasp::TextBoxTextBox id="id="MyMenuMyMenu" " runatrunat==serverserver/>/>
ASP .NET/CacheASP .NET/Cache
55
Mise en cache de donnéesMise en cache de données
�� Permet de mettre en cache des objets arbitraires par Permet de mettre en cache des objets arbitraires par programme.programme.
�� Prend en charge l'expiration et les dépendances.Prend en charge l'expiration et les dépendances.
�� Limité à une application et sa durée de vie équivaut à celle Limité à une application et sa durée de vie équivaut à celle de l'application. de l'application.
�� Exemple :Exemple :
‘mise en cache‘mise en cacheCache("Cache("mykeymykey")") = = myValuemyValue
‘récupération des données ‘récupération des données myValuemyValue = = Cache("Cache("mykeymykey")")If If myValuemyValue <> <> NullNull ThenThen
DisplayDataDisplayData((myValuemyValue) ) EndEnd IfIf
ASP .NET/CacheASP .NET/Cache
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
56
Vue d’ensembleVue d’ensemble
�� Système de configuration riche et souple qui permet aux Système de configuration riche et souple qui permet aux développeurs d'associer aisément des paramètres à une développeurs d'associer aisément des paramètres à une application application installableinstallable et aux administrateurs de personnaliser et aux administrateurs de personnaliser ces valeurs après le déploiement.ces valeurs après le déploiement.
�� La hiérarchie de répertoire d’une application contient les La hiérarchie de répertoire d’une application contient les fichiers de configuration de cette application (la configurationfichiers de configuration de cette application (la configurationest déployée par simple copie).est déployée par simple copie).
�� Fichiers de texte brut qui peuvent être lus et écrits par les Fichiers de texte brut qui peuvent être lus et écrits par les utilisateurs du serveur (protégés par IIS).utilisateurs du serveur (protégés par IIS).
�� Les modifications apportées aux fichiers de configuration Les modifications apportées aux fichiers de configuration ASP.NET sont automatiquement détectées par le système. ASP.NET sont automatiquement détectées par le système.
ASP .NET/configurationASP .NET/configuration
Format du fichier de configuration Format du fichier de configuration
�� Fichiers Fichiers machine.configmachine.config et et web.configweb.config basés sur XML.basés sur XML.
�� Exemple : calcul des paramètres de configuration de l'Exemple : calcul des paramètres de configuration de l'URLURLhttp://myserver/myapplication/mydir/page.aspxhttp://myserver/myapplication/mydir/page.aspx
�� Base configuration Base configuration settingssettings for machine. for machine. C:C:\\WinNTWinNT\\Microsoft.NETMicrosoft.NET\\FrameworkFramework\\v.2.00v.2.00\\configconfig\\machine.configmachine.config
�� OverriddenOverridden by by thethe configuration configuration settingssettings for for thethe site (or site (or thethe rootrootapplication). C:application). C:\\inetpubinetpub\\wwwrootwwwroot\\web.configweb.config
�� OverriddenOverridden by application configuration by application configuration settingssettings. . D:D:\\MyApplicationMyApplication\\web.configweb.config
�� OverriddenOverridden by by subdirectorysubdirectory configuration configuration settingssettings. . D:D:\\MyApplicationMyApplication\\MyDirMyDir\\web.configweb.config
ASP .NET/configurationASP .NET/configuration
57
Sections de configuration standardSections de configuration standard
ASP .NET/configurationASP .NET/configuration
Responsable du contrôle des paramètres du composant Responsable du contrôle des paramètres du composant Browser Browser CapabilitiesCapabilities. . <<browserCapsbrowserCaps> >
Responsable de la configuration des paramètres du modèle Responsable de la configuration des paramètres du modèle de processus ASP.NET sur les serveurs Web IIS. de processus ASP.NET sur les serveurs Web IIS. <<processModelprocessModel> >
Responsable de la configuration du service de suivi Responsable de la configuration du service de suivi ASP.NET. ASP.NET. <trace> <trace>
Responsable de tous les paramètres de compilation utilisés Responsable de tous les paramètres de compilation utilisés par ASP.NET. par ASP.NET. <compilation> <compilation>
Responsable de la configuration des paramètres de Responsable de la configuration des paramètres de globalisation d'une application. globalisation d'une application. <<globalizationglobalization> >
Responsable de la configuration du module HTTP d'état de Responsable de la configuration du module HTTP d'état de la session. la session. <<sessionStatesessionState> >
Responsable du mappage des URL entrantes à des classes Responsable du mappage des URL entrantes à des classes IHttpHandlerIHttpHandler<<httpHandlershttpHandlers> >
Responsable de la configuration des modules HTTP au sein Responsable de la configuration des modules HTTP au sein d'une application. Parmi leurs utilisations courantes, citons d'une application. Parmi leurs utilisations courantes, citons la sécurité et la connexion. la sécurité et la connexion.
<<httpModuleshttpModules> >
Utilisation des Utilisation des paramparam. d'application. d'application
�� Stockage de paramètres d'application personnalisés :Stockage de paramètres d'application personnalisés :�� chaînes de connexion de base de donnéeschaînes de connexion de base de données�� des chemins d'accès de fichiersdes chemins d'accès de fichiers�� des URL de services Web XML distants des URL de services Web XML distants
�� Exemple :Exemple :<configuration><configuration>
<<appSettingsappSettings>>
<<addadd keykey="WSURL" value="http://="WSURL" value="http://localhostlocalhost/WSTP/Service1.asmx"/>/WSTP/Service1.asmx"/>
</</appSettingsappSettings>>
<!<!---- etcetc… … ---->>
</configuration></configuration>
�� Extraction :Extraction :String String wsurlwsurl = = ConfigurationSettings.AppSettingsConfigurationSettings.AppSettings("WSURL")("WSURL") ;;
DémoDémo
ASP .NET/configurationASP .NET/configuration
58
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
ArborescenceArborescence
�� Plusieurs applications Web sur un même ASP .NET, identifiées Plusieurs applications Web sur un même ASP .NET, identifiées à l'aide d'un préfixe d'à l'aide d'un préfixe d'URLURL unique au sein d'un site Web.unique au sein d'un site Web.
�� Chaque application ASP.NET Chaque application ASP.NET FrameworkFramework exposée dans un exposée dans un espace de noms d'espace de noms d'URLURL est sauvegardée dans un répertoire du est sauvegardée dans un répertoire du système de fichiers situé sur un partage de fichiers local ou système de fichiers situé sur un partage de fichiers local ou distant.distant.
ASP .NET/DéploiementASP .NET/Déploiement
59
AssemblysAssemblys
�� Unité de déploiement des classes dans le Unité de déploiement des classes dans le CommonCommon LanguageLanguageRuntimeRuntime..
�� 11 projet projet VisualVisual Studio.NETStudio.NET = 1= 1 assemblyassembly .NET .NET FrameworkFramework = = 11 DLL physique DLL physique
�� Déploiement par simple copie (!) Déploiement par simple copie (!) �� dans le cache d’dans le cache d’assemblyassembly global (pour du code partagé) global (pour du code partagé) �� ou local (pour le code propre à une application ; sécurité et ou local (pour le code propre à une application ; sécurité et
facilité du facilité du versionningversionning). ). SousSous--repertoirerepertoire //binbin par défaut.par défaut.
ASP .NET/DéploiementASP .NET/Déploiement
Démarrage d'une applicationDémarrage d'une application
�� Création manuelle d'un domaine d'application lors du Création manuelle d'un domaine d'application lors du démarrage d'une nouvelle application (à la 1ère demande démarrage d'une nouvelle application (à la 1ère demande cliente).cliente).
�� Paramètres passés au CLR :Paramètres passés au CLR :�� Les chemins d'accès des répertoires constituant le cache Les chemins d'accès des répertoires constituant le cache
d'd'assemblyassembly locallocal�� Les restrictions de sécurité de l'applicationLes restrictions de sécurité de l'application
�� Chargement de classe :Chargement de classe :�� Lors de la résolution de classe, ne charge jamais la DLL physiquLors de la résolution de classe, ne charge jamais la DLL physique, e,
mais une copie de la DLL d’mais une copie de la DLL d’assemblyassembly..�� Possibilité de supprimer, remplacer, renommer à tout moment un Possibilité de supprimer, remplacer, renommer à tout moment un
assemblyassembly..�� DetectionDetection automatique par le CLR des modifications automatique par le CLR des modifications �� prises en prises en
compte sans redcompte sans redéémarrer le serveurmarrer le serveur
ASP .NET/DéploiementASP .NET/Déploiement
60
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
Authentification et autorisationAuthentification et autorisation
�� AuthentificationAuthentification�� l'action de déterminer l'identité de l'entité à l'origine de la l'action de déterminer l'identité de l'entité à l'origine de la requêterequête�� généralement une paire nom/mot de passegénéralement une paire nom/mot de passe
�� AutorisationAutorisation�� processus consistant à déterminer si une entité authentifiée peuprocessus consistant à déterminer si une entité authentifiée peut t
accéder à une ressource donnée.accéder à une ressource donnée.
�� ASP.NET agit conjointement avec IIS pour assurer des services ASP.NET agit conjointement avec IIS pour assurer des services d'authentification et d'autorisation destinés aux applications.d'authentification et d'autorisation destinés aux applications.
�� Possibilité d’Possibilité d’accederacceder dans le code à l’objet dans le code à l’objet WindowsPrincipalWindowsPrincipal�� Vérification d’un rôle,… Vérification d’un rôle,…
ASP .NET/ASP .NET/SecuritéSecurité
61
ConfigurationConfiguration
�� SpecificationSpecification dans dans web.configweb.config du type d’authentification à du type d’authentification à mettre en placemettre en place�� possibilité : None, Windows, possibilité : None, Windows, PassportPassport, , FormsForms�� exemple : exemple : <<authenticationauthentication mode="mode="FormsForms"/>"/>
�� Autorisation des utilisateurs et des rôles dans Autorisation des utilisateurs et des rôles dans web.configweb.config�� éléments "éléments "allowallow", "", "denydeny" avec attributs "" avec attributs "usersusers", "", "rolesroles""�� liste d’utilisateurs ou de rôles possiblesliste d’utilisateurs ou de rôles possibles�� test sur la test sur la méthodméthod HTTP avec l’attribut "HTTP avec l’attribut "verbverb" " �� Utilisateurs spéciaux :Utilisateurs spéciaux :
�� ? = utilisateur non authentifié? = utilisateur non authentifié�� * = tous les utilisateurs* = tous les utilisateurs
�� exemple : exemple : <<authorizationauthorization>><<allowallow verbverb="POST" ="POST" usersusers="="johnjohn,,marymary">"><<allowallow verbverb="POST" ="POST" rolesroles="="AdminsAdmins">"><<denydeny verbverb="POST" ="POST" usersusers="*">="*"><<allowallow verbverb="GET" ="GET" usersusers="*">="*">
</</authorizationauthorization>>
ASP .NET/ASP .NET/SecuritéSecurité
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
62
Vue d’ensembleVue d’ensemble
�� Prise en charge du codage Prise en charge du codage �� en interne, ASP.NET utilise Unicode .en interne, ASP.NET utilise Unicode .�� ASP.NET peut être configuré de plusieurs manières pour ASP.NET peut être configuré de plusieurs manières pour
utiliser un codage défini (lors de dialogue vers l’extérieur).utiliser un codage défini (lors de dialogue vers l’extérieur).
�� Prise en charge de la localisationPrise en charge de la localisation�� propriétés propriétés CurrentCultureCurrentCulture de la classede la classe CultureInfoCultureInfo�� Routines de mises en formes pour l’affichage de nombres, Routines de mises en formes pour l’affichage de nombres,
devises, dates,…devises, dates,…�� DémoDémo
�� Paramètres de configurationParamètres de configuration�� Dans fichier Dans fichier web.configweb.config ::�� Dans la directive @Page :Dans la directive @Page :
ASP .NET/LocalisationASP .NET/Localisation
<configuration><configuration><<system.websystem.web>>
<<globalizationglobalizationfileEncodingfileEncoding="utf="utf--8" 8" requestEncodingrequestEncoding="utf="utf--8" 8" responseEncodingresponseEncoding="utf="utf--8" 8" culture="culture="enen--USUS""
/> /> </</system.websystem.web>>
</configuration></configuration><%@Page Culture="<%@Page Culture="frfr--FRFR" " UICultureUICulture="="frfr--FRFR" " ResponseEncodingResponseEncoding="utf="utf--8"%> 8"%>
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
63
Traçage au niveau de la pageTraçage au niveau de la page
�� Pour activer le traçage au niveau de la page, utilisez un Pour activer le traçage au niveau de la page, utilisez un attribut attribut Trace="Trace="truetrue"" dans la directive dans la directive PagePage de niveau de niveau supérieur.supérieur.
�� Le traçage au niveau de la page vous permet d'écrire des Le traçage au niveau de la page vous permet d'écrire des instructions de débogage en tant que composants de la instructions de débogage en tant que composants de la sortie cliente d'une page. Les instructions de traçage sont sortie cliente d'une page. Les instructions de traçage sont sorties à l'aide des méthodes sorties à l'aide des méthodes Trace.WriteTrace.Write et et Trace.WarnTrace.Warn, , en passant une catégorie et un message pour chaque en passant une catégorie et un message pour chaque instruction.instruction.
�� Le débogage du code peut s'exécuter de manière Le débogage du code peut s'exécuter de manière conditionnelle, selon que le traçage est activé ou non pour conditionnelle, selon que le traçage est activé ou non pour la page. Utilisez la propriété la page. Utilisez la propriété Trace.IsEnabledTrace.IsEnabled de la page de la page pour déterminer si le traçage est activé. pour déterminer si le traçage est activé.
ASP .NET/TraçageASP .NET/Traçage
Traçage au niveau de l’appli.Traçage au niveau de l’appli.
�� Vous pouvez activer le traçage au niveau de l'application à Vous pouvez activer le traçage au niveau de l'application à l'aide d'une section «l'aide d'une section « tracetrace » du fichier de configuration » du fichier de configuration situé dans le répertoire racine de l'application.situé dans le répertoire racine de l'application.
�� Le traçage au niveau de l'application active la sortie du Le traçage au niveau de l'application active la sortie du journal de traçage pour chaque page d'une application (à journal de traçage pour chaque page d'une application (à moins qu'une directive au niveau de la page désactive moins qu'une directive au niveau de la page désactive explicitement le traçage). explicitement le traçage).
�� Après le lancement d'une série de demandes, vous pouvez Après le lancement d'une série de demandes, vous pouvez accéder aux détails qui les concernent en demandant accéder aux détails qui les concernent en demandant «« trace.axdtrace.axd » à partir de la racine de l'application. » à partir de la racine de l'application.
ASP .NET/TraçageASP .NET/Traçage
64
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
DéboguageDéboguage
�� Puissants outils de déboguage intégré à Puissants outils de déboguage intégré à VisualVisual Studio .NETStudio .NET
�� DémoDémo
ASP .NET/ ASP .NET/ DéboguageDéboguage
65
ASP .NETASP .NET�� IntroductionIntroduction�� Web Web FormsForms .NET.NET�� Services Web .NETServices Web .NET�� Application Web .NETApplication Web .NET�� Service de cacheService de cache�� ConfigurationConfiguration�� DéploiementDéploiement�� SécuritéSécurité�� LocalisationLocalisation�� TraçageTraçage�� DéboguageDéboguage�� PerformancePerformance
ASP .NET/SommaireASP .NET/Sommaire
Vue d’ensemble des performancesVue d’ensemble des performances
�� Amélioration de la plateforme MicrosoftAmélioration de la plateforme Microsoft�� les pages ne sont compilées qu'une seule foisles pages ne sont compilées qu'une seule fois�� mises en cache pour les demandes ultérieuresmises en cache pour les demandes ultérieures�� cache des objets internes, tels que des variables de serveur, cache des objets internes, tels que des variables de serveur,
afin d'accélérer l'accès au code utilisateurafin d'accélérer l'accès au code utilisateur�� bénéfice des performances du bénéfice des performances du CommonCommon LanguageLanguage RuntimeRuntime ::
�� compilation compilation justejuste--àà--tempstemps,,�� adaptation aux ordinateurs mono ou multiprocesseurs, etc. adaptation aux ordinateurs mono ou multiprocesseurs, etc.
�� Notions importantesNotions importantes�� Débit Débit : nombre de demandes qu'une application Web peut : nombre de demandes qu'une application Web peut
servir par unité de temps (demandes/seconde)servir par unité de temps (demandes/seconde)�� Temps de réponseTemps de réponse : durée entre le lancement d'une : durée entre le lancement d'une
demande et le premier octet retourné au client par le serveur demande et le premier octet retourné au client par le serveur �� Temps d’exécutionTemps d’exécution : durée de traitement d'une demande : durée de traitement d'une demande �� EvolutivitéEvolutivité : capacité de s’adapter aux ressources: capacité de s’adapter aux ressources
ASP .NET/ ASP .NET/ PerformancePerformance
66
Conseils (1)Conseils (1)
�� Désactivez l'état de session s'il n'est pas utiliséDésactivez l'état de session s'il n'est pas utilisé�� Mode Mode ReadRead--OnlyOnly possiblepossible
�� Évitez les allersÉvitez les allers--retours excessifs du serveurretours excessifs du serveur�� Utilisation des validation d'entrées de formulaires côté clientUtilisation des validation d'entrées de formulaires côté client
�� Utilisez Utilisez Page.IsPostbackPage.IsPostback pour éviter toute tâche pour éviter toute tâche supplémentaire lors d'un allersupplémentaire lors d'un aller--retourretour�� Ex : lors du passage dans le Ex : lors du passage dans le page_loadpage_load Démo !Démo !
�� Utilisez les contrôles serveur avec parcimonie et de Utilisez les contrôles serveur avec parcimonie et de manière appropriéemanière appropriée
�� Évitez tout état d'affichage de contrôle serveur Évitez tout état d'affichage de contrôle serveur excessifexcessif
Démo !Démo !
ASP .NET/ ASP .NET/ PerformancePerformance
Conseils (2)Conseils (2)
�� Ne vous basez pas sur des exceptions dans votre Ne vous basez pas sur des exceptions dans votre codecode
�� Utilisez la liaison anticipée dans du code Utilisez la liaison anticipée dans du code VisualVisual BasicBasic�� <%@ Page <%@ Page LanguageLanguage="VB" Strict="="VB" Strict="truetrue" %> " %>
�� Utilisez Utilisez SqlDataReaderSqlDataReader pour un curseur de données pour un curseur de données en avant et en lecture seuleen avant et en lecture seule�� Meilleurs résultats que le Meilleurs résultats que le DataSetDataSet
�� N'oubliez pas de désactiver le mode débogageN'oubliez pas de désactiver le mode débogage
ASP .NET/ ASP .NET/ PerformancePerformance
TryTryresultresult = 100 / = 100 / numnum
Catch (e As Exception)Catch (e As Exception)resultresult = 0= 0
EndEnd
If If NotNot ((numnum = 0) = 0) ThenThenresultresult = 100 / = 100 / numnum
ElseElseresultresult = 0= 0
EndEnd IfIf
67
Outil proposéOutil proposé
�� WAS = Web Application StressWAS = Web Application Stress
�� Simulation de N clients HTTPSimulation de N clients HTTP�� temps de réponsetemps de réponse�� débitsdébits�� compteurs de performances relatives à l’applicationcompteurs de performances relatives à l’application�� détecteur de goulet d’étranglementdétecteur de goulet d’étranglement�� ……
ASP .NET/ ASP .NET/ PerformancePerformance
INETINFO.EXEIIS worker process
ISAPI ExtensionManager
ASPNET_ISAPI.DLLASP.NET ISAPI extension
ASPNET_WP.EXEASP.NET worker process
ASP.NET
CLR
COM+ runtime (DLLHost.EXE)
Win2k Server
HTTP Request
Http Http RequestRequestHandlingHandling
IIS
ASP.DLLStatic HTML
Files
Request
*.html
*.htm
Request
*.html
*.htm
named pipes
ASP.NET
Request
*.asmx
*.aspx
ASP.NET
Request
*.asmx
*.aspx
*.htm*.aspx
68
SommaireSommaire
�� Qu’est ce que .NETQu’est ce que .NET�� Vue d’ensemble du Vue d’ensemble du FrameworkFramework .NET.NET�� Le Le CommonCommon LanguageLanguage RuntimeRuntime�� Les objets COM+Les objets COM+�� C# et VB.NETC# et VB.NET�� VisualVisual Studio .NETStudio .NET�� ASP.NETASP.NET�� ADO.NET et XMLADO.NET et XML
ADO .NETADO .NET
�� PrésentationPrésentation�� ObjetsObjets�� ResuméResumé
ADO .NET/SommaireADO .NET/Sommaire
69
DéfinitionDéfinition
�� Ensemble de Ensemble de classes permettant un accès à différentes sources de données
�� Evolution par rapport à ADOEvolution par rapport à ADO�� composante essentielle du composante essentielle du frameworkframework .NET.NET�� propose un support optimum au modèle déconnectépropose un support optimum au modèle déconnecté�� support d’support d’XMLXML natif au natif au frameworkframework�� reste accessible facilement aux développeurs ADOreste accessible facilement aux développeurs ADO
ADO .NET/PrésentationADO .NET/Présentation
Architecture d’ADO .NET
System.DataSystem.Data��
�� ..SqlTypesSqlTypes : : Ensemble de classes qui permet de faire la correspondance avec les types de données rencontrées dans SQL Server
�� ..SqlClientSqlClient : : Ensemble de classes qui permet un accès à une source de données de type SQL Server
�� ..CommonCommon : : Ensemble de classes qui permet d ’implémenter son propre fournisseur d ’accès aux données
�� ..OleDbOleDb : : Ensemble de classes qui permet un accès à différentes sources dedonnées
�� ..OracleClientOracleClient : : Ensemble de classes qui permet un accès à une source de données de type Oracle Server (distribué par Microsoft avec Visual Studio .NET 2005)
ADO .NET/PrésentationADO .NET/Présentation
70
ADO Architecture : 2 ModesADO Architecture : 2 Modes
�� Mode déconnectéMode déconnecté�� Dataset qui cache les Dataset qui cache les
données sans maintien données sans maintien de la connexionde la connexion
�� Mode Connecté Mode Connecté �� ManagedManaged ProviderProvider�� Accès physique à la baseAccès physique à la base
ADO .NET/PrésentationADO .NET/Présentation
Mode déconnectéMode déconnecté
DataSetDataSet DataAdaptersDataAdapters DataBaseDataBase
�� Les données sont “cachées” dans les Les données sont “cachées” dans les DataSetsDataSets�� Dans ce modèle on limite les allers retour vers le serveurDans ce modèle on limite les allers retour vers le serveur�� Un Un DataSetDataSet est un cache de data issu d’une est un cache de data issu d’une databasedatabase�� Notion de “Notion de “virtualvirtual data store“data store“
�� Un Un DataSetDataSet contient une ou plusieurs “tables”contient une ou plusieurs “tables”�� Les Les DataAdaptersDataAdapters forment le pont entre forment le pont entre DataSetDataSet et et DatabaseDatabase�� Ils chargent les data depuis la Ils chargent les data depuis la DatabaseDatabase dans le dans le DataSetDataSet�� Ils répercutent les modifications du Ils répercutent les modifications du DataSetDataSet vers la vers la DatabaseDatabase
selon un “batch update selon un “batch update modelmodel””
ADO .NET/PrésentationADO .NET/Présentation
71
Exemple d’architectureExemple d’architecture
ADO .NET/PrésentationADO .NET/Présentation
ADO .NETADO .NET
�� PrésentationPrésentation�� Objets Objets �� ResuméResumé
ADO .NET/SommaireADO .NET/Sommaire
72
ConnexionsConnexions�� Objets utilisés pour se connecter à une base de donnéeObjets utilisés pour se connecter à une base de donnée�� 2 possibilités :2 possibilités :
�� Fournisseur de donnée spécifiqueFournisseur de donnée spécifique�� SQL Server (SQL Server (System.Data.SqlClientSystem.Data.SqlClient))�� Oracle Server (Oracle Server (System.Data.OracleClientSystem.Data.OracleClient))
�� Fournisseur de donnée OLE DB .NET (Fournisseur de donnée OLE DB .NET (System.Data.OleDbSystem.Data.OleDb))�� Pour tout type de connexionPour tout type de connexion
�� Exemple :Exemple :
ADO .NET/ObjetsADO .NET/Objets
public sub Run()public sub Run()Dim Dim mySqlConnectionmySqlConnection as as SqlConnectionSqlConnectionmySqlConnectionmySqlConnection = = new new SqlConnection("serverSqlConnection("server=worm; database==worm; database=Bank;userBank;user id=id=sasa")")trytry
mySqlConnection.OpenmySqlConnection.Open()()Console.WriteLine("ConnexionConsole.WriteLine("Connexion {0} {0} ouverteouverte", ", mySqlConnection.ConnectionStringmySqlConnection.ConnectionString))' Close the connection explicitly' Close the connection explicitlymySqlConnection.ClosemySqlConnection.Close()()Console.WriteLineConsole.WriteLine("Connexion ferme. Il est important de fermer les connexions ex("Connexion ferme. Il est important de fermer les connexions explicitement.")plicitement.")
catchcatchConsole.WriteLineConsole.WriteLine("Impossible d'ouvrir la connexion {0}", ("Impossible d'ouvrir la connexion {0}", mySqlConnection.ConnectionStringmySqlConnection.ConnectionString))
end tryend tryend subend sub
CommandCommand
�� Information envoyée à une base de donnéeInformation envoyée à une base de donnée�� Objet présenté par les classes spécifiques d’un fournisseur Objet présenté par les classes spécifiques d’un fournisseur
(ex: (ex: SqlCommandSqlCommand))�� Type : INSERT, SELECT, UPDATE, DELETE, Appel de Type : INSERT, SELECT, UPDATE, DELETE, Appel de
procédures stockées,…procédures stockées,…
�� Exemple :Exemple :
ADO .NET/ObjetsADO .NET/Objets
public sub Run()public sub Run()Dim Message as StringDim Message as StringDim Dim myConnectionmyConnection as as SqlConnectionSqlConnectionDim Dim mySqlCommandmySqlCommand as as SqlCommandSqlCommandmySqlConnectionmySqlConnection = = new new SqlConnection("serverSqlConnection("server=worm; database==worm; database=Bank;userBank;user id=id=sasa")")
mySqlCommandmySqlCommand = = new new SqlCommand(“insertSqlCommand(“insert into CUSTOMERS (NAME) values (‘into CUSTOMERS (NAME) values (‘poilpoil’)”, ’)”, myConnectionmyConnection))trytry
myConnection.OpenmyConnection.Open()()mySqlCommand.ExecuteNonQuerymySqlCommand.ExecuteNonQuery()()Message = "Nouvel enregistrement dans la table Message = "Nouvel enregistrement dans la table CustomersCustomers de de BankBank.«.«myConnection.ClosemyConnection.Close()()
catch catch myExceptionmyException as Exceptionas ExceptionMessage= "Impossible d'Message= "Impossible d'insererinserer l'enregistrement: " + l'enregistrement: " + myException.ToStringmyException.ToString()()
endend trytryConsole.Write(MessageConsole.Write(Message))
end subend sub
73
DataReaderDataReader�� Objet similaire à un curseur de donnéesObjet similaire à un curseur de données
�� en lecture seule/avance seuleen lecture seule/avance seule�� prend en charge les données à deux dimensions (flat) ainsi que lprend en charge les données à deux dimensions (flat) ainsi que les es
données hiérarchiquesdonnées hiérarchiques
�� Exemple :Exemple :
ADO .NET/ObjetsADO .NET/Objets
public sub Run()public sub Run()Dim Message as StringDim Message as StringDim Dim myConnectionmyConnection as as SqlConnectionSqlConnectionDim Dim mySqlCommandmySqlCommand as as SqlCommandSqlCommandDim Dim myReadermyReader as as SqlDataReaderSqlDataReadermySqlConnectionmySqlConnection = = new new SqlConnection("serverSqlConnection("server=worm; database==worm; database=Bank;userBank;user id=id=sasa")")mySqlCommandmySqlCommand = = new new SqlCommand(“selectSqlCommand(“select * from CUSTOMERS”, * from CUSTOMERS”, myConnectionmyConnection))trytry
myConnection.OpenmyConnection.Open()()myReadermyReader = = mySqlCommand.ExecuteReadermySqlCommand.ExecuteReader()()do while (do while (myReader.ReadmyReader.Read()()))
Console.Write(Console.Write(myReader("CustomerID").ToStringmyReader("CustomerID").ToString()()))looploopmyConnection.ClosemyConnection.Close()()
catch catch myExceptionmyException as Exceptionas Exception… … endend trytry
end subend sub
DataSetDataSet & & DataAdapterDataAdapter : définitions: définitions
�� DataSetDataSet ::�� similaire à ADO similaire à ADO RecordsetRecordset (mais + puissant et toujours en mode (mais + puissant et toujours en mode
déconnecté) déconnecté) �� cache de donnée avec structure similaire à une BDcache de donnée avec structure similaire à une BD�� Pas d’interaction directe avec la source de donnéesPas d’interaction directe avec la source de données�� Nombreuses caractéristiques XMLNombreuses caractéristiques XML
�� DataAdapterDataAdapter ::�� «pont» entre le «pont» entre le DataSetDataSet et la source de donnéeset la source de données�� mise à jour de la BD à partir du mise à jour de la BD à partir du DataSetDataSet (méthode update)(méthode update)�� Définition explicite des commandes d’Définition explicite des commandes d’INSERTINSERT, DELETE et UPDATE , DELETE et UPDATE
pour répercuter sur la BD les modifications du pour répercuter sur la BD les modifications du DataSetDataSet (ou (ou methodemethode SqlCommandBuilderSqlCommandBuilder() plus coûteuse)() plus coûteuse)
ADO .NET/ObjetsADO .NET/Objets
74
DataSetDataSet & & DataAdapterDataAdapter : schéma: schéma
ADO .NET/ObjetsADO .NET/Objets
Public Sub Run()Public Sub Run()Dim Message as StringDim Message as StringDim Dim myConnectionmyConnection as as SqlConnectionSqlConnectionDim Dim mySqlDataAdaptermySqlDataAdapter as as SqlDataAdapterSqlDataAdapterDim Dim workParamworkParam as as SqlParameterSqlParameter
mySqlConnectionmySqlConnection = = new new SqlConnection("serverSqlConnection("server=worm; database==worm; database=Bank;userBank;user id=id=sasa")")mySqlDataAdaptermySqlDataAdapter = = new new SqlDataAdapter("SelectSqlDataAdapter("Select * from CUSTOMERS", * from CUSTOMERS", myConnectionmyConnection))
' Build the insert Command' Build the insert CommandmySqlDataAdapter.InsertCommandmySqlDataAdapter.InsertCommand = = new new SqlCommand(“insertSqlCommand(“insert into CUSTOMERS (NAME) values into CUSTOMERS (NAME) values
(@NAME)”, (@NAME)”, myConnectionmyConnection))workParamworkParam = = mySqlDataAdapter.InsertCommand.Parameters.Add("@NAMEmySqlDataAdapter.InsertCommand.Parameters.Add("@NAME", ", SqlDbType.VarCharSqlDbType.VarChar, 50), 50)workParam.SourceColumnworkParam.SourceColumn = “NAME"= “NAME"workParam.SourceVersionworkParam.SourceVersion = = DataRowVersion.CurrentDataRowVersion.Current
' Build the delete Command' Build the delete CommandmySqlDataAdapter.DeleteCommandmySqlDataAdapter.DeleteCommand = = new new SqlCommand(“deleteSqlCommand(“delete dromdrom CUSTOMERS where CUSTOMERS where
NAME=@NAME”, NAME=@NAME”, myConnectionmyConnection))workParamworkParam = = mySqlDataAdapter.DeleteCommand.Parameters.Add("@NAMEmySqlDataAdapter.DeleteCommand.Parameters.Add("@NAME", ", SqlDbType.VarCharSqlDbType.VarChar, 50), 50)workParam.SourceColumnworkParam.SourceColumn = “NAME"= “NAME"workParam.SourceVersionworkParam.SourceVersion = = DataRowVersion.CurrentDataRowVersion.Current
‘No update command in ‘No update command in thisthis casecase‘….‘….
DataSetDataSet & & DataAdapterDataAdapter : exemples: exemples
ADO .NET/ObjetsADO .NET/Objets
75
‘…suite‘…suite
Dim Dim myDataSetmyDataSet as as DataSetDataSetmyDataSetmyDataSet = new = new DataSetDataSet()()
mySqlDataAdapter.Fill(myDataSetmySqlDataAdapter.Fill(myDataSet, "Region"), "Region")
‘insert‘insertDim myDataRow2 as Dim myDataRow2 as DataRowDataRowmyDataRow2 = myDataRow2 = myDataSet.Tables(“CUSTOMERS").NewRowmyDataSet.Tables(“CUSTOMERS").NewRow()()myDataRow2(myDataRow2(““NAMENAME““) = ) = ““poilpoil””myDataSet.Tables("Region").Rows.Add(myDataRow2)myDataSet.Tables("Region").Rows.Add(myDataRow2)
trytrymySqlDataAdapter.Update(myDataSetmySqlDataAdapter.Update(myDataSet, "Region"), "Region")Console.WriteConsole.Write("Mise jour réussie du ("Mise jour réussie du DataSetDataSet !")!")
catch e as Exceptioncatch e as ExceptionConsole.Write(e.ToStringConsole.Write(e.ToString())())
end tryend tryend subend sub
DataSetDataSet & & DataAdapterDataAdapter : exemples: exemples
ADO .NET/ObjetsADO .NET/Objets
ADO .NETADO .NET
�� PrésentationPrésentation�� Objets Objets �� ResuméResumé
ADO .NET/SommaireADO .NET/Sommaire
76
RésuméRésumé
�� ADO.NET est la nouvelle évolution de ADO pour le .Net ADO.NET est la nouvelle évolution de ADO pour le .Net FrameworkFramework. . �� ADO.NET a été créé en mettant l'accent sur les caractéristiques ADO.NET a été créé en mettant l'accent sur les caractéristiques
multicouches, sans état et XML au premier plan. Deux nouveaux multicouches, sans état et XML au premier plan. Deux nouveaux objets, les objets, les DataSetDataSet et et DataAdapterDataAdapter, ont été introduits pour ces , ont été introduits pour ces scénarios. scénarios.
�� ADO.NET peut être utilisé pour obtenir des données à partir d'unADO.NET peut être utilisé pour obtenir des données à partir d'un flux, flux, ou d'enregistrer des données dans un cache pour effectuer des ou d'enregistrer des données dans un cache pour effectuer des modifications. modifications.
�� La documentation contient de nombreuses autres informations sur La documentation contient de nombreuses autres informations sur ADO.NET. ADO.NET.
�� N'oubliez pas que vous pouvez exécuter une commande directement N'oubliez pas que vous pouvez exécuter une commande directement sur la base de données pour effectuer des insertions, des mises sur la base de données pour effectuer des insertions, des mises à jour à jour et des suppressions. Il n'est pas nécessaire de placer les donnéet des suppressions. Il n'est pas nécessaire de placer les données es dans un dans un DataSetDataSet avant de pouvoir insérer, mettre à jour ou avant de pouvoir insérer, mettre à jour ou supprimer cellessupprimer celles--ci. ci.
�� De plus, un De plus, un DataSetDataSet peut être utilisé pour se lier aux données, se peut être utilisé pour se lier aux données, se déplacer dans les données, et naviguer dans les relations de dondéplacer dans les données, et naviguer dans les relations de données. nées.
ADO .NET/RésuméADO .NET/Résumé
Annexe : liens utilesAnnexe : liens utiles
�� Didacticiels ASP.NET, Windows Didacticiels ASP.NET, Windows FormsForms + divers HOWTO :+ divers HOWTO :http://fr.gotdotnet.com/http://fr.gotdotnet.com/quickstartquickstart//
�� Programmation Programmation PocketPCPocketPC ::http://www.codeppc.com/http://www.codeppc.com/ ((eVBeVB & & eVCeVC))http://www.codeppc.net/http://www.codeppc.net/ (SDE)(SDE)
�� Site français d’utilisateur :Site français d’utilisateur :http://www.dotnetguru.orghttp://www.dotnetguru.org
�� Groupes Groupes GoogleGoogle ((http://http://groups.google.comgroups.google.com))microsoft.public.dotnet.frameworkmicrosoft.public.dotnet.framework
�� WebcastWebcast FR (notamment la FR (notamment la presentationpresentation du CLR)du CLR)http://support.microsoft.com/default.aspx?scid=fh;fr;pwebcst&exphttp://support.microsoft.com/default.aspx?scid=fh;fr;pwebcst&expand=nand=n
one&ln=fr&cid=C_7937one&ln=fr&cid=C_7937
Recommended