Dotnet - Bisgambiglia

publicité
Université de Corse, Pasquale PAOLI
Master 2
Paul-Antoine Bisgambiglia,
[email protected]
http://www.ent-montecristo.org/paul-
Support de Cours
antoine2.bisgambiglia/
Année 2008 - 2009
Dotnet DotNet nʹest pas un langage ou un logiciel, mais la nouvelle stratégie de Microsoft. S’il ne fallait retenir qu’un seul mot de la plate forme DotNet, c’est l’intégration (vue par Microsoft). Fondée sur des standards de l’industrie (HTTP, XML, SOAP, WSDL), DotNet est un moyen simple de normaliser la coopération des services logiciels entre eux (services Web, XML), quelle que soit leur localisation, leur implémentation technique, qu’ils soient internes ou externes, existants ou à inventer. DOTNET
1
INTRODUCTION
4
PRINCIPALES CARACTERISTIQUES DE .NET
5
INTEROPERABILITE
5
COMMON RUNTIME ENGINE
6
INDEPENDANCE DU LANGAGE
6
ARCHITECTURE
7
COMMON LANGUAGE RUNTIME
9
CLR ET SECURITE
11
CLR ET GESTION DE LA MEMOIRE
11
BIBLIOTHEQUE DE CLASSES
14
BASE CLASS LIBRARY
14
DATA AND XML CLASSES
15
XML WEB SERVICES, WEB FORMS, WINDOWS FORMS
15
INFRASTRUCTURE .NET
16
STRUCTURE D'UNE APPLICATION .NET
16
COMPILATION ET EXECUTION D'UNE APPLICATION .NET
16
FONCTIONNEMENT
16
ESPACES DE NOM
18
LES METADONNEES ET LA REFLEXION
18
ASSEMBLAGES ET MANIFESTES
19
LES MODULES
20
LE MODULE ADO.NET
20
LE MODULE WINFORMS
20
LE MODULE ASP.NET
20
LANGAGES ET OUTILS DE DEVELOPPEMENT
22
LANGAGES SUPPORTES
22
OUTILS DE DEVELOPPEMENT
22
VERSION
23
CONCLUSION
24
SIMPLICITE DE DEVELOPPEMENT
24
SIMPLICITE DU DEPLOIEMENT
24
SIMPLICITE DU VERSIONING
25
FIGURES
26
INDEX
27
WEBOGRAPHIE
28
COMPLEMENT
29
PRESENTATION
29
QU’EST-CE QUE .NET ?
29
OBJECTIFS DE .NET
30
CARACTERISTIQUES DE .NET
31
BILAN
34
INTRODUCTION Le Framework .NET est un composant logiciel pouvant être utilisé par un système
d'exploitation Microsoft Windows et Microsoft Windows Mobile depuis la version 5 (.NET
Compact Framework). Une version légère et limitée fourni avec un moteur d'exécution
fonctionnant à l'intérieur d'un navigateur ou d'un périphérique mobile est disponible
(Silverlight). La version 3.0 du Framework est intégrée à Windows Vista et à la plupart des
versions de Windows Server 2008 ou téléchargeable depuis le site de Microsoft.
Le Framework .NET s'appuie sur la norme CLI qui est indépendant du langage. Ainsi tous les
langages compatible respectant la norme CLI ont accès a toutes les bibliothèques installées
dans l'environnement d'exécution. Le Framework .NET est un sous ensemble de la
technologie Microsoft .NET.
Il a pour but de faciliter la tâche des développeurs en proposant une approche unifiée à la
conception d'applications Windows ou Web, tout en introduisant des facilités pour le
développement, le déploiement et la maintenance d'applications.
Le Framework gère tous les aspects de l'exécution d'une application dans un environnement
d'exécution dit « managé » :
-
il alloue la mémoire pour le stockage des données et des instructions du programme ;
-
il autorise ou refuse des droits à l'application ;
-
il démarre et gère l'exécution ;
-
il gère la réallocation de la mémoire pour les ressources qui ne sont plus utilisées.
Il est composé de deux blocs principaux :
-
l'implémentation d'une machine virtuelle compatible CLI sous le nom de CLR et DLR
-
le Framework .NET
PRINCIPALES CARACTERISTIQUES DE .NET Interopérabilité Du fait de la nécessité d'interagir entre les nouvelles et les anciennes applications, le
Framework fournit des moyens pour accéder aux fonctionnalités qui sont mis en œuvre dans
les programmes qui s'exécutent en dehors de l'environnement .NET. La possibilité d'accéder
aux composants COM est fournie par les espaces de noms System.Runtime.InteropServices et
System.EnterpriseServices. L'accès aux autres fonctionnalités est fourni grâce à P/Invoke.
Figure 1 : CLI .NET
Common Runtime Engine Les langages de programmation du Framework sont compilés dans un langage intermédiaire
connu sous le nom de Common Intermediate Language, ou CIL (anciennement connu sous le
nom de Microsoft Intermediate Language, ou MSIL). Ce langage n'est pas interprété, mais
subi une compilation à la volée et une compilation au niveau de la Common Language
Runtime (CLR). La CLR est l'implémentation de la CLI.
Indépendance du langage La spécification du Common Type System (ou CTS) définit l'ensemble des types de données
et structures de programmation supportés par la CLR ainsi que comment ils peuvent ou non
interagir entre eux. Par conséquent, le .NET Framework supporte l'échange des instances des
types entre les programmes écrit avec n'importe lequel des langages .NET.
ARCHITECTURE Le point fort de .NET est d’intégrer des technologies existantes dans un tout cohérent. Par
exemple, tout ce qui concerne les communications de données reste basé sur : SOAP, XML et
HTTP. En aucun cas Microsoft n’a cherché à bouleverser les acquis, ce qui est une
nouveauté.
La seule différence technique majeure est l’adoption d’un système d’exécution virtuel ‘VES’
qui se trouve désormais au cœur de toute la structure .NET et sur laquelle tout repose.
L’ensemble .NET peut être ainsi divisé en :
-
un Framework proprement dit (bibliothèques de classes) ;
-
des outils de développement comme Visual Studio .NET ou Web Matrix (EDI gratuit
pour ASP.NET) ;
-
un ensemble de servers comme MS SQL Server ou BizTalk Server ;
-
des logiciels comme Windows XP, CE, Vista et les packs Office.
On peut aussi découper .NET en quatre pôles :
-
les outils de développement et les librairies (langages C#, VB.NET, J#, Visual Studio
.NET, des composants de développement, la librairie commune) ;
-
les techniques Web incluant les services Web et les sites dynamique avec ASP.NET ;
-
la gestion des données avec ADO.NET et les serveurs Microsoft spécialisés pour B2,
les e-mails, le stockage de données ;
-
le support de plates-formes techniques telles que les téléphones mobiles, les PDA, les
consoles de jeux.
La figure suivante montre les différentes couches du Framework .NET. A la base se trouve le
CLR, Common Language Runtime, c'est-à-dire la machine virtuelle de .NET, celle qui
exécute le code IL appelé aussi CIL (Common Intermadiate Language), le pseudo code du
CLR. Le CIL (ou MSIL) est un pseudo-code généré par les compilateurs des langages
compatibles .NET.
Au-dessus de CLR se trouve l’ensemble des librairies de classes du Framework, couche sur
laquelle repose la gestion des données.
Au sommet, se trouvent deux blocs, celui des Windows Forms (WinForms), ensembles de
classes permettant la conception d’IHM Windows et celui appelé ASP.NET. Ce dernier n’a
pas grand-chose à voir techniquement avec ce qu’on désigne par ASP sous Win32. ASP.NET
est un ensemble de classes permettant à la fois la conception de sites dynamiques, la création
d’IHM pour le Web, les WebForms et la conception de services Web.
Figure 2: Le Framework .NET
Remarque : CIL
Le CIL est aussi appelé MSIL pour Microsoft Intermediate Language, lorsqu’il est adapté à
l’implémentation spécifique Microsoft du Framework .NET, mais .NET existe aussi pour
d’autres plateformes. Il existe, par exemple, un projet Open Source appelé MONO mené par
Novell qui vise à créer une version gratuite du Framework. MONO est déjà disponible sous
Windows, et plusieurs distributions GNU/Linux.
Dans la partie suivante nous détaillons la machine virtuelle .NET CLR.
COMMON LANGUAGE RUNTIME Common Language Runtime (CLR) est le nom choisi par Microsoft pour le composant de
machine virtuelle du Framework .NET. Il s'agit de l'implémentation par Microsoft du standard
Common Language Infrastructure (CLI) qui définit l'environnement d'exécution des codes de
programmes. Le CLR fait tourner une sorte de bytecode nommé Microsoft Intermediate
Language (MSIL). Le compilateur à la volée transforme le code MSIL en code natif
spécifique au système d'exploitation. Le CLR fonctionne sur des systèmes d'exploitation
Microsoft Windows.
Le CLR gère :
-
La compilation en code natif et l’exécution de code CIL ;
-
La gestion de la sécurité ;
-
La gestion de la mémoire ;
-
La gestion des processus ;
-
La gestion des threads (tâches).
Le CLR est composé des 4 parties suivantes :
-
Common Type System (CTS)
-
Common Language Specification (CLS)
-
Metatdata
-
Virtual Execution System (VES)
Le CLR est à .NET ce que la JVM est à Java, c’est-à-dire une machine virtuelle, sans laquelle
l'exécution de code .NET ne serait pas possible. À l'inverse de son concurrent, le Framework
.NET a été conçu pour permettre l'interopérabilité entre différents langages.
Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé
en MSIL (Microsoft Intermediate Language). Ce code intermédiaire ne comporte aucune
instruction relative au matériel (i.e. hardware) ou au système d'exploitation. Il ne peut donc
pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement
une application en IL, langage qui ressemble à l'assembleur, sans passer par un langage de
dernière génération comme le C#.
Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (Common
Type System) et le CLS (Common Language Specification). Il apporte de nombreuses
fonctionnalités comme le Garbage Collector (la mémoire utilisée par l'application lors de
l'exécution est optimisée), la BCL (Base Class Library), et le système de sécurité. Une fois le
code présent dans le CLR, il va enfin pouvoir être compilé par le JIT Compiler (Just in Time)
en langage natif de la machine.
Il existe trois types de JIT :
-
Pre-JIT : le code entier est directement compilé ;
-
Econo-JIT : le code est compilé par parties, et la mémoire libérée si nécessaire ;
-
Normal-JIT : le code n'est compilé que quand c'est nécessaire, mais est ensuite placé en
cache pour pouvoir être réutilisé.
Quel que soit le type de JIT, le but est d'accélérer l'exécution du code en réutilisant dès que
possible le cache. Pour voir ceci visuellement, c'est très simple. Il suffit d'écrire une simple
application ASP.NET (Hello World par exemple). À la première exécution, le code est
compilé. Par la suite et aussi longtemps que l'application ne subit pas de modifications, le
cache sera utilisé, d'où une vitesse d'exécution bien plus rapide que lors de la première
exécution.
Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les
spécifications étant disponibles, il s'est trouvé un groupe de personnes ayant décidé de porter
.NET sur Linux, donnant naissance à la plate-forme de développement libre Mono.
Remarque : CLR
Si l’on regarde de plus près e fonctionnement de .NET, il s’avère que le terme de « machine
virtuelle » tel qu’on l’entend en Java, c'est-à-dire un interpréteur de pseudo code, est mal
choisi, Microsoft semble d’ailleurs refuser ce terme. En effet, le pseudo code .NET n’est
jamais interprété comme cela se fait sous Java mais compilé avant d’être exécuté. Bien que le
CLR .NET prenne en compte des tâches similaires à celles de Java : gestion des codes
intermédiaires, gestion mémoire, ramasse miettes et sécurité, il existe une nuance importante.
Le terme « machine virtuelle » employé à propos de CLR de .NET doit donc être pris
uniquement comme une comparaison simplifiée.
CLR et Sécurité Le Framework .NET a son propre mécanisme de sécurité. Ses deux 'composants' principaux
sont CAS (Code Access Security) et la validation et vérification.
CAS est basé sur un système de preuves associées à une assembly particulière. Typiquement,
la preuve est l'origine de l'assembly (Installation en local, téléchargement à partir d'Internet ou
d'un Intranet, ...). CAS utilise cette preuve pour déterminer les permissions données au code.
Un code peut demander une autorisation pour le code qu'il appelle. La demande d'autorisation
sait que le CLR parcours la pile d'appel : chaque assembly de chaque méthode dans la pile est
vérifiée. Si au moins une de ces assembly n'est pas autorisée à avoir la permission demandée
une erreur est levée.
Quand une assembly est chargée, le CLR effectue divers tests. Deux d'entre eux sont la
validation et la vérification. Pendant la validation, le CLR vérifie que l'assembly contient un
code et des métadonnées valides. Après cela, il vérifie que les tables internes sont correctes.
En fait la vérification n'est pas si exacte que cela, elle vérifie juste que le code ne fait rien de
non-sure. Le code non-sure sera exécuté uniquement si l'assembly a la bonne permission.
Le Framework .NET utilise des appdomains (domaine d'application) comme mécanisme pour
isoler le code d'un processus. Un appdomain peut être crée et du code chargé ou déchargé
d'un appdomain indépendamment des autres appdomains. Les appdomains peuvent aussi être
configurés indépendamment avec différents privilèges de sécurité. Ceci peut aider à améliorer
la sécurité d'une application en séparant le code potentiellement non-sure du reste. Cependant,
le développeur doit séparer l'application en plusieurs sous-domaines, ceci n'est pas à la charge
du CLR.
CLR et Gestion de la mémoire Le CLR du Framework .NET décharge le développeur du fardeau qu'est la gestion de la
mémoire (allocation et libération une fois fini).
L'allocation de la mémoire pour les instances des types .NET (objets) est effectuée de façon
continue et automatique. Aussi longtemps qu'il existe une référence vers un objet, qu'elle soit
directe ou indirecte via un graphe, l'objet est considéré comme étant utilisé par le CLR. À
partir du moment où il n'y a plus de référence sur un objet, et par conséquent qu'il ne peut plus
être atteint ou utilisé, il devient un déchet. Cependant, il continue d'utiliser la mémoire qui lui
a été allouée. Le Framework .NET possède un composant appelé ramasse-miettes (ou
Garbage Collector en anglais) qui s'exécute périodiquement sur un processus léger différent
de celui de l'application. Il énumère tous les objets inutilisés et récupère la mémoire qui leur
était allouée.
Le ramasse-miettes de .NET est non déterministe. Il s'exécute seulement après qu'une certaine
quantité de mémoire ait été allouée ou s'il y a un problème de manque de mémoire. Par
conséquent, il n'y a pas moyen de déterminer quand est-ce que les conditions de
déclenchement du ramasse-miettes sont satisfaites et celui-ci s'exécute de façon non
déterministe. Chaque application .NET possède un ensemble d'éléments racines qui sont des
pointeurs maintenus par le CLR et qui pointent sur les objets du tas managé. Ceci inclut des
références aux objets statiques, à ceux définis comme variables locales, aux paramètres
définis dans la portée courante du code et enfin aux registres processeurs. Quand le ramassemiettes s'exécute, il met en pause l'application et pour chaque objet référencé dans la racine, il
énumère récursivement tous les objets qu'il peut atteindre et les marque. Il utilise les méta
données .NET et la réflexion pour découvrir les objets encapsulés par un autre objet et les
parcourt récursivement. Il énumère ensuite tous les objets sur le tas (qui étaient initialement
alloués de façon continue) en utilisant la réflexion et tous les objets qui n'ont pas été marqués
sont considérés comme des déchets. C'est la phase de marquage. Puisque la mémoire détenue
par ces déchets n'a plus d'importance, elle est considérée comme de l'espace libre. Cependant,
ce procédé laisse des bouts de mémoire libres entre chaque objet encore référencé par
l'application. Ces objets sont ensuite compactés ensemble en utilisant memcpy pour déplacer
ces objets et rendre l'espace mémoire utilisé à nouveau continu. Chaque pointeur rendu
invalide par le déplacement de l'objet sur lequel il pointait et mis à jour avec le nouvel
emplacement par le ramasse-miettes. Après ces opérations, l'application poursuit son cours.
En réalité, le ramasse-miettes utilisé par le Framework .NET est basé sur un système de
génération. Les objets se voient attribués une génération; les objets nouvellement crées
appartiennent à la génération 0. Les objets qui survivent à la première passe du ramassemiettes se voient promus à la génération 1 et les objets qui survivent à une deuxième passe
sont promus à la génération 2. Le .NET n'utilise pas d'autre niveau de génération. Les objets
ayant un niveau de génération élevé sont moins souvent analysés par le ramasse-miettes que
les objets ayant un faible niveau de génération. Cet algorithme améliore l'efficacité du
ramasse-miettes, car les vieux objets ont tendance à avoir une durée de vie plus longue que les
nouveaux objets. Par conséquent, moins d'objets ont besoin d'être analysés et compactés.
BIBLIOTHEQUE DE CLASSES La bibliothèque de classes est une très riche collection de types réutilisables que vous pouvez
utiliser pour développer vos applications que ce soit des applications à ligne de commande ou
à interface graphique utilisateur ou des applications ASP.NET, comme les services Web XML
et Web Forms, etc.
Pour développer des applications avec .NET vous avez bien sur Microsoft Visual Studio avec
ses versions express riches et gratuites que vous pouvez télécharger sur le site de Microsoft
mais vous avez aussi d’autres solutions possibles tel que SharpDevelopp pour vos
applications en C# qui n’a rien à envier à son grand frère Visual Studio.
Il y a trois couches au dessus du CLR, chacune comportant des classes apportant des
fonctionnalités de plus en plus évoluées.
Base Class Library Dans la première couche se trouve la BCL, rassemblant des classes permettant les
manipulations de chaînes de texte, la gestion des entrées/sorties, des communications réseaux,
des threads et le design des interfaces utilisateur. Ces classes sont similaires à celles présentes
dans l'API Java développée par Sun. Par exemple, la manipulation des chaînes est disponible
dans la classe String, dans les deux langages; la différence étant qu'en Java il n'existe pas de
type de base pour manipuler les chaînes (on manipule des objets 'String'), alors qu'en .NET, le
type string (avec un 's' minuscule) a spécifiquement été défini.
La BCL offre de très nombreuses classes, interfaces et types qui forment le socle des
développements sous .NET. La BCL est aussi appelée FCL pour Framework Class Library
(bibliothèques que classes du Framework). Elle permet d’unifier les développements
puisqu’elle fournit l’ensemble des outils de base aux applications.
La BCL et le CLR forment à eux deux l’essentiel de Framework et offre aux applications un
support particulièrement performant pour gérer les exceptions, les entrées/sorties, le
mécanisme de réflexion (équivalent de l’introspectioni Java et des RTTI Delphi), la gestion de
i
L'introspection
est
On l'appelle aussi Réflexion.
le
principe
qui
définit
l'accès
aux
métadonnées
d'objets
Java.
la sécurité, l’accès aux données, la gestion des IUM dites ‘riches’ pour Windows et le Web,
etc.
Data and XML Classes La deuxième couche est composée de deux bibliothèques de classes d'accès aux données.
Tout d'abord, ADO.NET, s'élevant sur les bases de l'ancien ADO (ActiveX Data Objects)
utilisé par les développeurs ASP, et permettant l'accès sous format XML aux interfaces de
bases de données SQL Server, ODBC, OLE DB, Oracle et Sybase, et bien sûr aux fichiers
XML. Les XML Classes permettent de manipuler les données XML. On y trouve par exemple
les classes XSLT permettant la transformation d'un document XML vers n'importe quel type
d'autre document. Un autre exemple, il est très facile de charger un document XML dans une
table, et vice versa, grâce au XML sous-jacent.
XML Web Services, Web Forms, Windows Forms La dernière couche, la plus élevée, est utilisée pour la création de Web Services, de pages
Web, et d'applications Windows. Les deux premiers forment ASP.NET, là aussi une référence
à l'ancien langage de programmation Web. Lorsque vous visitez des sites Internet, vous
pouvez remarquer les pages se terminant par .aspx qui sont des pages Web écrites en .NET,
tandis que les pages écrites en ASP se terminent en .asp (pour s'amuser on peut très bien
modifier les configurations du serveur IIS de Microsoft pour modifier l'extension des fichiers
ASP.NET alors que ce n'est pas une généralité).
INFRASTRUCTURE .NET Structure dʹune application .NET L'unité de base d'une application .NET est appelée un assemblage (assembly). Il s'agit d'un
ensemble de code, de ressources et de métadonnées. Un assemblage est toujours accompagné
par un manifeste (assembly manifest) qui décrit ce qu'il contient : nom, version, types de
données exposées, autres assemblages utilisés, instructions de sécurité. Un assemblage est
composé de un ou plusieurs modules qui contiennent le code.
Compilation et exécution dʹune application .NET Tout comme avec java, quand une application .NET est compilée, elle n'est pas compilée en
code binaire machine, mais dans un code binaire intermédiaire CIL. Une application consiste
donc en un ensemble d'assemblages contenus dans un ou plusieurs fichiers exécutables ou
fichiers DLL en CIL. Au moins un de ces assemblages doit contenir un point d'entrée afin de
démarrer l'application.
Quand l'exécution d'un programme démarre, le premier assemblage est chargé en mémoire.
Le CLR commence par examiner les permissions demandées par cet assemblage et les
compare à la politique de sécurité (security policy) du système. Puis, si l'assemblage est
autorisé à s'exécuter, un processus est créé pour exécuter l'application. Le premier morceau de
code nécessaire à l'exécution est chargé en mémoire et est compilé en code binaire natif par le
compilateur JIT (Just-In-Time, juste à temps). Une fois compilé, le code est exécuté et stocké
en mémoire sous forme de code natif, garantissant ainsi que chaque portion de code n'est
compilée qu'une seule fois lors de l'exécution de l'application.
Fonctionnement L’infrastructure sur laquelle le CLR se repose s’appelle CLI, pour Common Language
Infrastructure. CLI dispose d’une spécification publique et ouverte (ISO) qui assure dès
maintenant la propagation de .NET.
Lorsque le CLR exécute un programme compilé en CIL, il commence par vérifier si le fichier
a déjà été compilé en langage machine. Si tel est le cas, il ouvre l’image binaire et l’exécute :
sinon, il invoque le JITer (Just In Time Enchanced Runtime) qui a la charge de traduire le CIL
en un véritable programme en langage machine pour la plateforme cible.
C’est la que réside la force de .NET : le CIL n’est pas exécuté par un interpréteur, lent par
essence. Ce n’est qu’un langage pivot permettant la diffusion d’exécutables qui seront
réellement compilé lors de la première utilisation. Cette astuce permet de diffuser le même
exécutable .NET, qui, potentiellement, fonctionnera sur différentes plates-formes de façon
identique.
Le JITer de .NET n’est pas en soi une révolution puisqu’il existe aussi des JITs pour Java.
Mais à la différence de ce dernier qui a introduit le JIT pour pallier son principal défaut, le fait
d’être interprété et lent, .NET intègre et étend le principe de compilation à la volée, classe par
classe. L’avantage principal de .NET (sur Win32 et Java) est qu’il a été conçu ultérieurement
et qu’il a su tirer leçon des erreurs de conceptions de ces derniers.
Figure 3 : Du code source au binaire exécuté
Un code compilé et exécuté par le CLR est appelé « code managé » ou « code géré ». La
figure ci-dessus présente la transformation d’un code source écrit en différents langages,
d’abord en code CIL par le biais des compilateurs spécifiques des langages, puis en binaire
par le JITer invoqué par le CLR.
Le code, avant d’être exécuté, passe ainsi par trois phases :
-
code source ;
-
code CIL ;
-
code binaire.
Le JITer effectue la compilation de l’IL à la volée, d’où son nom (Just In Time) et cela classe
par classe, selon trois modes :
-
compilation de la classe invoquée et mise en cache (Windows) ;
-
compilation de tout le code et mise en cache (vitesse) ;
-
compilation à la demande sans mise en cache (PDA peu de mémoire).
Sous Windows c’est le premier mode qui est exploité par défaut.
Espaces de nom Sous .NET toute classe est repérée dans un espace de nom (namespace). Ce procédé simple et
puissant permet d’éviter les conflits de noms entre différentes bibliothèques.
La gestion de ces espaces de nom est particulièrement intuitive puisque chaque niveau
de sous-espace est séparé des niveaux supérieurs par un simple point dans le nom. Ainsi, on
trouve le Framework de nombreux espaces de nom, chacun étant spécialisé dans un type de
service. Ce procédé, évite les conflits de noms, et apporte une hiérarchisation des
bibliothèques.
Les métadonnées et la réflexion La structure d’un exécutable .NET lui permet d’exposer de nombreuse informations
techniques sur l’application, notamment son code IL et ses métadonnées.
Ces dernières peuvent être visualisées facilement à l’aide de l’utilitaire ILDASM fourni avec
le SDK du Framework. Cet outil peut même désassembler proprement le code IL qui pourra
être recompilé à l’aide de ILASM, le compilateur de CIL, comme un assembleur permet de
compiler de code symbolique en code machine sous Win32.
Remarque :
On notera que la présence du code IL et des méta données dans les exécutables .NET pose un
problème vis-à-vis du ‘reverse engineering’ puisqu’à l’aide d’un simple utilitaire du
Framework, on peut obtenir une source modifiable et re-compilable à l’aide d’un autre outil
lui aussi fourni. Il n’y a plus besoin d’être un hacker de haut niveau pour percer les secrets
d’une application existante. Il est tout de même possible de protéger le code.
Assemblages et manifestes Un assemblage est l’unité de base d’un code .NET pouvant être déployé. Il est constitué de
modules, d’un manifeste et de ressources. Ce terme lève l’ambiguïté qui régnait dans le
monde COM lorsque Microsoft parlait de composants aussi bien à propos de classes que de
dll. Sous .NET, l’assemblage est un exécutable qui entre dans une logique de ‘plug’n’play’
accompagné de son manifeste, une description de l’assemblage. Le manifeste peut être intégré
à l’exécutable ou bien être fourni sous forme de fichier externe.
Un assemblage .NET peut être soit un .exe soit une dll et son manifeste indique quels autres
assemblages il utilise, leur version, etc.
LES MODULES Le module ADO.NET ADO.NET est un ensemble de classes qui exposent les services d'accès aux données au
programmeur .NET. ADO.NET propose un large ensemble de composants pour la création
d'applications distribuées avec partage de données. Partie intégrante du .NET Framework, il
permet d'accéder à des données relationnelles, XML et d'application. ADO.NET répond à
divers besoins en matière de développement, en permettant notamment de créer des clients de
bases de données frontaux et des objets métier de couche intermédiaire utilisés par des
applications, outils, langages ou navigateurs Internet.
Le module WinForms WinForms est un ensemble de composants graphiques prédéfinis.
Les formulaires étant les unités de base de votre application, il est essentiel de réfléchir à leur
fonction et à leur conception. Un formulaire peut être comparé à une ardoise vide à laquelle,
en tant que développeur, vous apportez des améliorations à l'aide de contrôles pour créer une
interface utilisateur et à l'aide de code pour manipuler des données. Visual Studio offre, à cet
effet, un environnement de développement intégré (IDE) pour vous aider à écrire le code,
ainsi qu'un ensemble de contrôles élaborés écrits avec .NET Framework. En améliorant les
fonctionnalités de ces contrôles avec votre propre code, vous pouvez facilement et rapidement
développer les solutions adaptées à vos besoins.
Le module ASP.NET ASP.NET est un outil essentiel dans le cadre du développement d'applications Web
distribuées. Il fournit un ensemble de fonctionnalités de sécurité qui facilitent la création
d'applications Web sécurisées. ASP.NET est conçu pour fonctionner avec les fonctionnalités
de sécurité actuelles de Internet Information Services (IIS), de la plate-forme Windows et de
.NET Framework et offre également une grande souplesse et des possibilités d'extension.
Vous pouvez ainsi créer des mécanismes de sécurité personnalisés étroitement intégrés dans
vos applications.
Ce module fournit des conseils et des recommandations dans le cadre du traitement de
l'authentification, de l'autorisation et de la communication sécurisée lors de la création
d'applications Web ASP.NET sécurisées.
LANGAGES ET OUTILS DE DEVELOPPEMENT Langages supportés Grâce au CLR, la plate-forme .NET est indépendante de tout langage de programmation et
supporte nativement un grand nombre de langages de programmation, parmi lesquels :
Ada,
APL,
C#,
C++,
Cobol,
Eiffel,
Fortran,
Haskell,
ML,
J#,
Jscript,
Mercury,
Oberon,
Objective Caml,
Oz,
Pascal,
Perl,
Python,
Scheme,
SmallTalk,
Visual Basic
Outils de développement Visual Studio 2008
Visual Studio 2008 Express Edition
Visual Studio
Visual SourceSafe 2005
Expression Web
Expression Blend
MonoDevelop
MSDN Library pour VS2008
SharpDevelop
WebMatrix
Plugin C# pour éclipse
Resharper
Version Microsoft a commencé le développement du .NET Framework à la fin des années 1990 sous
le nom de Next Generation Windows Services (NGWS ou « Prochaine génération de services
Windows »). La première version bêta du framework (.Net 1.0) est disponible à la fin de l'an
2000.
Version Version Number Release Date
1.0
1.0.3705.0
05-01-2002
1.1
1.1.4322.573
01-04-2003
2.0
2.0.50727.42
07-11-2005
3.0
3.0.4506.30
06-11-2006
3.5
3.5.21022.8
19-11-2007
CONCLUSION .NET a été conçu dans l’optique d’une informatique intégrée et agile. Cette agilité n’est pas
seulement un concept commercial, Microsoft a réellement tenté de simplifier les choses,
même pour les développeurs.
Simplicité de développement .NET intègre de nombreux comportements et encapsule beaucoup de techniques éparses. Il
offre ainsi un cadre cohérent à l’ensemble du développement des applications. Les méthodes
restent les mêmes qu’il s’agisse de créer un formulaire Web ou une application fenêtrée pour
Windows.
De grandes simplifications ont été faites dans l’utilisation et la création de composants COM,
dans la création de serveurs ou de clients de services Web, etc.
Le CLI, qui impose certains comportements aux langages .NET, garantit une sécurité accrue
et élimine la possibilité de certains bogues classiques. La gestion d’un ramasse-miettes
mémoire par exemple supprime la possibilité d’erreurs dans l’allocation de la mémoire et des
ressources, cause fréquente de dysfonctionnement des applications sous Win32.
Simplicité du déploiement Sous .NET, le déploiement d’un assemblage se fait par simple copie dans un répertoire. Grâce
aux informations de sécurité et aux métadonnées, le CLR s’occupe de tout et charge le bon
module. Il sait même identifier les assemblages référencés par un exécutable et les télécharger
à la demande, ce qui permet de proposer des applications de faible taille dont les modules
seront chargés depuis Internet ou un intranet, selon les besoins.
L’utilisation du cache par ‘Shadow Copy’ simplifie aussi la mise à jour des fichiers : n’étant
pas utilisés directement, il est possible de mettre à jour un ‘.exe’ ou une ‘dll’ sur le disque
sans rebooter, même si le fichier est en cours d’exécution.
Simplicité du versioning2 A l’aide des informations de versions stockées dans le manifeste, des définitions des espaces
de nommage et des clés publiques de signature des assemblages, le CLR est capable d’isoler
un code donné sans ambiguïté.
Il est possible de diffuser plusieurs versions d’un même ‘dll’ portant le même nom de fichier
qui peuvent pourtant coexister et s’exécuter en même temps sans que cela ne crée de conflit.
Le moyen de faire cohabiter plusieurs versions d’un même fichier relève du GAC pour
‘Global Assembly Cache’ (cache global des assemblages). Puisque le CLR n’exécute pas un
fichier directement mais une copie compilée en binaire dans le cache, il suffit de forcer
l’installation dans le cache des différentes versions du fichier en utilisant GACUTIL, un
utilitaire du Framework. Une fois dans le cache, l’assemblage est reconnu par .NET grâce
aux informations du manifeste, le nom physique du fichier n’a plus d’importance. Deux ‘dll’
portant le même nom ne pourront pas entrer en conflit et les logiciels les utilisant ne
connaîtront aucun problème puisque le CLR appellera la bonne version (version référencée
dans ces logiciels).
.Net est une plateforme uniformisée et à vocation universelle. Elle facilite "nettement" le
développement d'applications pour ceux qui maîtrisent la POO, proposant une hiérarchie
d'objets ainsi qu'une harmonisation générale des API. Mais les programmes générés exigent
des ordinateurs dotés d'une surcouche logicielle et donc devant être de plus en plus puissants.
2
Gestion des versions
FIGURES Figure 1 : CLI .NET
5
Figure 2: Le Framework .NET
8
Figure 3 : Du code source au binaire exécuté
17
INDEX ISO · 16
A
J
appdomains · 11
ASP.NET · 8, 14
JIT · 10
assembly · 11
JITer · 17
JVM · 9
B
M
BCL · 14
MSIL · 7, 9
C
N
CIL · 7, 17
CLI · 4, 9, 16
namespace · 18
CLR · 4, 6, 7, 8, 9, 10, 11, 12, 14, 16, 17, 22, 24, 25
CLS · 9
COM · 19
CTS · 9, 10
D
dll · 24, 25
G
GAC · 25
S
SOAP · 1, 7
V
VES · 7, 9
W
Web Forms · 14
Win32 · 8
H
HTTP · 1, 7
I
IHM · 8
IL · 7
WSDL · 1
X
XML · 1, 7, 14, 15
WEBOGRAPHIE http://fr.wikipedia.org/wiki/Framework_.NET
http://fr.wikipedia.org/wiki/Common_Language_Runtime
http://www.commentcamarche.net/contents/dotnet/dotnet-intro.php3
http://blog.nomade-dz.com/introduction-a-la-plate-forme-net/
http://dotnet.developpez.com/outils/
http://msdn.microsoft.com/fr-fr/express
http://msdn.microsoft.com/fr-fr/library/
http://fr.wikipedia.org/wiki/Microsoft_.NET
Documents :
La Plate-forme .NET © Olivier Dahan 2005 www.e-naxos.com
Tutorial :
http://msdn.microsoft.com/fr-fr/asp.net/bb412335.aspx
COMPLEMENT Fiche technique de .NET tiré du site :
http://www.3ie.fr/nouvelles_technologies/fiche/fiche_NET.htm
Description .NET n'est pas un langage ou un logiciel, mais la nouvelle stratégie de Microsoft.
Présentation .NET est un ensemble de technologies permettant l'interconnexion des informations, des
individus, des systèmes informatiques et des terminaux.
Qu’est‐ce que .NET ? .NET se présente comme une vision de la prochaine génération d'applications qui repose sur
des standards tels que XML (eXtensible Markup Language), HTTP (Hyper-Text Transfer
Protocol), SOAP (Simple Object Access Protocol), WSDL (Web Service Definition
Language)...
.NET, une initiative stratégique...
-
une stratégie marketing ;
-
une plate-forme de développement unifié ;
-
un environnement d’exécution sécurisé ;
-
le remplaçant de l’architecture 3-tiers DNA (Distribued interNet Architecture).
Pour Microsoft, le Web doit changer :
-
le web ne doit plus s’arrêter à la fourniture de simples pages Web en HTML
(HyperText Markup Language) ;
-
l’utilisateur doit être identifié automatiquement par le site sur lequel il est en train de
naviguer. Celui-ci n'est donc plus contraint de saisir d’informations personnelles, cela à
chaque connexion.
Microsoft veut résoudre les problèmes liés à l’utilisation de plusieurs ordinateurs par un
même individu. Il désire ainsi apporter une solution quant à la consultation du courrier
électronique et le partage de fichiers.
Microsoft souhaite aussi offrir aux développeurs la possibilité de créer des applications
pouvant être déployées sur n’importe quel type de plate-forme et d’architecture, cela en leur
apportant des outils adéquats.
Pour les entreprises, Microsoft souhaite réduire la complexité de gestion des systèmes en
accroissant la fiabilité via l'augmentation de la planification et de la gestion des opérations.
La stratégie .NET, Microsoft apporte les solutions suivantes :
-
un réseau Internet personnalisé qui héberge pour chaque utilisateur ses préférences et
les données de ses applications ;
-
une interaction entre l’utilisateur et ses applications grâce à la voix et à l’écriture
manuscrite ;
-
l’utilisateur aura un accès permanent à ses données et ses applications via le réseau et ce
à partir de n’importe où et de n’importe quel terminal ;
-
les applications et l’Internet pourront coopérer. C’est à dire que l’utilisateur sera
connecté à un ensemble de services et d’applications qui seront capables de
communiquer pour fournir des informations.
Objectifs de .NET -
prendre une place prépondérante sur le Web avec la location de services
-
proposer une interopérabilité entres les services Web à travers Internet
-
pouvoir consommer l’Internet sur plusieurs types de support (PC, PDA, téléphone…)
-
être la plate-forme de référence pour la création de Services Web XML (modules
applicatifs pouvant fournir des services et des données aux autres applications. On y
accède par les protocoles standards du Web : HTTP, XML, SOAP. Il est indépendant
du système d’exploitation ou du langage de programmation, ainsi, 2 services distants
peuvent dialoguer, et ceci indépendamment du système d'exploitation et des langages
de programmation utilisés de part et d'autre. Ils constituent donc un moyen de répartir
les traitements à travers le réseau et de mutualiser les services applicatifs)
.NET repose sur ?
Microsoft se repose sur :
-
le .NET Framework
-
les .NET Servers (la nouvelle génération des Serveurs Microsoft qui vont donc succéder
aux windows 2000 Server)
-
Visual Studio .NET
-
.NET Enterprise servers (logiciels comme Commerce Server, SQL Server, Content
Management Server...), un ensemble d'infrastructures techniques nécessaires pour le
développement et déploiement de solutions .NET
Caractéristiques de .NET -
supporte 27 langages de programmation (Perl, Python, Cobol, Haskell, ML, Jscript,
Ada, APL, Eiffel, Pascal, Fortran, Managed Managed C++ C++, Visual Basic, C#,
SmallTalk, Oberon, Scheme, Mercury, Oz, Objective Caml, J#, …)
-
l’objet y est prépondérant
-
possède un ensemble complet de classes de base (comparable à Java)
-
orienté pour le développement d’applications Web
-
basé sur des standards d’Internet : XML et SOAP
-
pas de code natif : utilisation d’un langage intermédiaire le MSIL (MicroSoft
Intermediate Language)
-
l’exécution des programmes est contrôlée par la CLR (Common Language Runtime),
comparable à JVM
-
une architecture complète : le Framework .NET
LE FRAMEWORK .NET
-
Environnement d’exécution de .net
-
Application et mémoire "managées" par la CLR
-
Indépendant des syntaxes
C’est l’environnement .NET Framework qui permettra de mettre en œuvre toute la stratégie
.NET.
Le .NET Framework est un environnement distribué gratuitement, sur toutes les versions de
Windows depuis Windows 95, dans le but de concurrencer son grand rival le JDK Java (Java
Development Kit).
En effet, tout comme J2EE (Java 2 Platform, Enterprise Edition), l’environnement .NET est
composé d’une machine virtuelle, d’un garbage collector (ramasseur de déchets - restitue la
mémoire de tous les objets dont la vie est terminée) et d’une bibliothèque de classes. De plus,
avec .NET, Microsoft propose de supporter plus de 27 langages de programmation. Ces
différents langages partagent de manière cohérente une hiérarchie de classes fournissant les
services de base. Ceci est rendu possible grâce à la définition de types standardisée.
D’autre part les applications .NET ne s’exécutent plus en code machine natif. Ainsi, le code
natif est abandonné au profit d’un langage intermédiaire le MSIL. Ce dernier s’exécute dans
une machine virtuelle : le Common Language Runtime (CLR).
L’environnement .NET met également l’accent sur l’utilisation du XML et du protocole
SOAP. C’est grâce à cela que les serveurs .Net pourront communiquer avec l’extérieur et avec
d’autres terminaux. Ainsi, les futures versions de Windows intègreront l’environnement .NET
et les technologies de web services. De même, les téléphones mobiles et les PDA intègreront
une version embarquée de .NET.
Un des intérêts de cet environnement réside dans la possibilité d’avoir les composants d’une
application répartis sur différents serveurs afin que les terminaux ayant une faible capacité de
calcul
ou
de
mémoire
puissent
faire
exécuter
leurs
traitements
à
distance.
Mise à part XML et SOAP, Microsoft s’appuie également sur d'autres standards Internet, à
savoir HTTP, WSDL et UDDI (Universal Description Discovery and Integration). Notez que
Microsoft est l'une des premières sociétés à avoir proposé un annuaire UDDI utilisable.
L'architecture .NET
Il est parfois difficile de discerner l’ensemble des applications présentes dans l’environnement
.NET. Cela est du au discours marketing de Microsoft qui montre que toutes les prochaines
versions de logiciel porteront le nom commercial .NET. Ainsi on a déjà vu apparaître les
termes Office.Net, SQL Server.NET et Biztalk Server.NET.
L’architecture .NET se présente donc sous la forme d'un ensemble de services communs
utilisables par plusieurs langages objet. Ces services s’exécutent sous forme de code
intermédiaire (MSIL) et indépendamment de l’architecture dont ils découlent dans un runtime
(CLR) qui permet de gérer les ressources et de contrôler le bon fonctionnement des
applications.
Les différents composants de cette architecture sont donc les suivants :
-
CLR (Common Language Runtime)
Il s’agit du moteur d’exécution des applications de l’infrastructure .NET. Le CLR est un
environnement d’exécution commun qui permet d’exécuter le bytecode du langage
intermédiaire le MSIL (Microsoft Intermediate Language). On notera que n’importe quel
langage supportant .Net peut être compilé en MSIL (si le compilateur existe) et exécuté par le
CLR.
-
Bibliothèque BCL (Base Class Library)
La bibliothèque BCL est une bibliothèque d’objets et de composants de base accessibles par
le CLR. C’est grâce aux composants de ces bibliothèques qu’il est possible d’écrire
rapidement des programmes faisant appel à des bases de données ou bien faisant des accès
réseau.
-
C# (C Sharp)
C# est un nouveau langage de programmation orienté objet ayant pour but de faciliter et
d’accélérer la programmation dans .NET. C# intègre des éléments de C, de C++ et de Java.
-
Visual Studio.NET (fusion de Visual Studio et de Visual InterDev)
Visual Studio.NET permet le développement d’applications classiques et de composants Web.
Il intègre le nouveau langage C#, le Visual Basic et le C++. C'est au sein de cet
environnement que ce fera la majeure partie du développement de web services.
-
WinForms et WebForms
WinForms et WebForms sont un ensemble de composants graphiques accessibles dans Visual
Studio.NET. WinForms et WebForms permettent de développer les interfaces d'applications à
l'aide de composants graphiques préconçus.
-
ASP.NET
C’est la nouvelle version d’ASP (Active Server Pages) qui supporte la compilation par MSIL.
Les pages ASP peuvent également être écrites dans n’importe quel langage pourvu qu’il
puisse être compilé par MSIL.
-
ADO.NET
C’est la nouvelle version de ADO (ActiveX® Data Objects). Elle est constituée d’une
nouvelle génération de composants d’accès aux bases de données ADO. XML et SOAP sont
utilisés pour l’échange des données.
-
Version embarquée de .NET
Le support des terminaux mobiles avec une version embarquée de l’environnement .NET.
Les applications .NET
Le domaine d'applications .NET est très vaste. Son intérêt repose sur la facilité de développer
des applications réseaux sur Internet, mais il est également possible de développer des
applications Windows traditionnelles comme Word ou Excel. Il remplace surtout la
technologie Web ASP par une nouvelle version ASP.Net qui n'a véritablement de commun
que son nom.
-
ASP .Net pour le développement de sites Internet ou Intranet
-
Windows Form pour le développement d'applications Windows traditionnelles
-
.Net et Web Services XML pour le développement d'applications client/serveur ou
peer-to-peer
Bilan Points forts
Points faibles
- Développement simplifié grâce au - Problème de sécurité : pas
moteur CLR
approprié
dans
- Structure multi langage et extensible / développement
le
cadre
Internet
de
où
Intéropérabilité des langages
l’utilisateur n’a pas forcément un
- Exécution multi plateformes
compte Windows
- Modèle de programmation simplifié et cohérent
-
Une
génération
technologique : réécriture pour une
productivité
environnement
comparable
Client/Serveur
PowerBuilder ou Delphi
-
Nouvelle
Installation
automatisée
des
aux grande partie de l’architecture DNA
comme Limité à la plate-forme Windows :
les applications développées pour la
Web
Services plate-forme
uniquement
.NET
sur
la
s’exécutent
plate-forme
.NET. Il n'existe pas de plateforme.NET
opérationnelle
sous
forme de logiciels libres.
- Le modèle d’architecture distribué
est basé sur COM+ (code non
managé). Microsoft doit migré au
plus
vite
vers
l’environnement
managé .NET
- Pas d’équivalent dans .NET des
EJB Entity permettant d’assurer la
persistance d’un objet distribué dans
la base de données
Evaluation
.Net est un ensemble de technologies récentes, son adoption par les développeurs
est encore indécise, mais Microsoft repose tout son développement actuel sur
.Net, il y a donc fort à parier que .Net devienne incontournable.
Téléchargement