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.