Professional Documents
Culture Documents
Net
Introduction
Michel RIVEILL
Université de Nice – Sophia Antipolis
riveill@unice.fr - http://www.polytech.unice.fr/~riveill
.NET
■ Introduction
◆ La plate-forme
◆ Le C.L.R (Common Language Runtime)
■ Le langage C# (et le CLR)
◆ Assemblies et module
◆ Types références et valeurs
◆ Réflexion et attributs
◆ Delegates et Events
■ Les applications Web
◆ Lʼaccès aux données
◆ Les services Web
◆ Les pages dynamiques
■ Les services techniques
◆ La sécurité
◆ Les transactions
■ .Net 2.0, 3.0, 3.5
■ Evaluation
◆ Le multi-langage dans .Net
◆ J2EE vs .Net
■ Pour aller plus loin
© 2007, M. Riveill 3
Première partie
Introduction
La plate-forme .Net
Le C.L.R (Common Language Runtime)
.NET, Cʼest quoi ?
■ Une vision (celle de Bill & Co) de lʼévolution des technologies du Web
◆ Les applications sont des services auxquels on peut sʼabonner et qui peuvent être
référencés
❖ Services offerts par des sites web
◆ De nouveaux terminaux complètent les PCs
❖ IHMs adaptables et personnalisables
◆ Respect des standards (issus du Web)
❖ Cʼest nouveau pour Microsoft
■ Une plate-forme qui supporte cette vision
◆ .NET Framework et Visual Studio.NET
◆ .NET Enterprise Servers – passerelle avec le système dʼexploitation Windows
❖Base de données, messages, Intégration, proxy, sécurité, mobilité, gestion du
contenu, orchestration des services, …
◆ .NET Building Block Services
❖ .NET My Services – des services fournis par Microsoft
▲ Passport (authentification)
▲ Hailstorm (profils utilisateurs)
▲ .NET Alerts (service dʼalerte)
◆ Objectif : rendre la construction dʼapplications Web aisées
❖ Par assemblage de Web services
© 2007, M. Riveill 5
La plate-forme .NET
Clients Applications
© 2007, M. Riveill 6
Services Web
Une évolution du Web
HTML
HTML, XML
Visual Studio.NET
■ Des outils pour développer des Common Language Specification
applications
ASP.NET: Web Services Windows
◆ Développement
◆ Mise au point
and Web Forms Forms
◆ Déploiement ADO.NET: Data and XML
◆ Maintenance
.NET Framework Base Classes
© 2007, M. Riveill 8
La plateforme .NET
Intégration
CLR
en mémoire
Win32
C++
VB
COM
DCOM Intégration Service WEB
© 2007, M. Riveill Dans .Net 3.0, le choix Service Web / .NET Remoting se fait au déploiement 9
La plateforme .Net
ECMA / ISO
Windows XP Windows 2000 NT 4.0 Windows 98, Me PocketPC Free BSD Linux
Implémentées par MS
© 2007, M. Riveill 10
Le .Net Framework
C# Design ComponentModel
Caching HtmlControls
JScript Security WebControls
VB Configuration System.Drawing
ECMA-335
ILAsm Collections IO Security Runtime
Configuration Net ServiceProcess InteropServices
ILDbDump
Diagnostics Reflection Text Remoting
SN
Globalization Resources Threading Serialization
ILDAsm
MetaInfo Common Language Runtime
GC App Domain Loader JIT
PEVerify
MSIL Common Type System Class Loader
Threads
© 2007, M. Riveill Sync Timers Filesystem 12
Le framework .NET
Les classes du framework
Threads
© 2007, M. Riveill Sync Timers Filesystem 13
Le CLR et ses implémentations
© 2007, M. Riveill 14
CLR et les implémentations
non Microsoft en 2003
© 2007, M. Riveill 15
Common Language Runtime
Buts
■ Développement de services
◆ Permettre une interopérabilité entre les langages
◆ Augmenter la productivité
❖ chacun écrit dans le langage quʼil maîtrise, le plus adapté, …
■ Services déploiement
◆ Simple, sûr
◆ Gestion des versions – NO MORE ʻDLL HELLʼ
■ Services à lʼexécution
◆ Performance
◆ Extensibilité
◆ Sûreté et disponibilité
◆ Sécurité
© 2007, M. Riveill 16
Common Language Runtime
Compilation
Compilateur
C++, C#, VB or any csc.exe or vbc.exe DLL or EXE
.NET language
© 2007, M. Riveill 17
Common Language Runtime
Assemblages - Assemblies
■ Assembly : archive
◆ Unité logique de déploiement (composants de la machine virtuelle)
◆ Contient Manifest, Metadata Type, code IL et autres ressources
■ Ressources
◆ .bmp, .jpg
© 2007, M. Riveill 18
Assemblies
Components of an Assembly
File3.dll
Manifest
© 2007, M. Riveill 19
Common Language Runtime
Modèle dʼexécution
Source
VB C# C++
code
Compiler Compiler Compiler
© 2007, M. Riveill 20
Common Language Runtime
Services
■ Gestion mémoire
© 2007, M. Riveill 21
Common Language Runtime
© 2007, M. Riveill 22
Les langages sur .Net
■ Perl
■ Python *.vb *.cpp *.cs *.?
■ Cobol
■ Haskell
■ ML
■ Jscript
■ Ada
■ APL
■ Eiffel
■
■
Pascal
Fortran VB C++ C# …
■ Managed C++
■ Visual Basic Respectent la
■ C#
■ SmallTalk Common Language Specification (CLS)
■ Oberon
■ Scheme
■ Mercury
■ Oz
■ Objective Caml
■ J# Intermediate Language (IL)
■ …
© 2007, M. Riveill
Indépendant de la plate-forme hardware23
La plate-forme .NET
Code Source
(C#, C++, VB.NET, J++, Cobol,
Smalltalk, Eiffel, etc.)
CLS/CTS
« Managed Code »
(MSIL)
.NET CLR .NET CLR .NET CLR .NET CLR .NET CLR .NET CLR
© 2007, M. Riveill 24
.NET Compact Framework
http://morpheus.developpez.com/cfdotnet/
© 2007, M. Riveill 25
Compact Framework .NET
© 2007, M. Riveill 26
Quelques singularités
© 2007, M. Riveill 27
Deuxième partie
■ Mais surtout :
◆ C# est la fidèle reproduction des concepts de la machine virtuelle
de .Net, le CLR
© 2007, M. Riveill 29
C#
© 2007, M. Riveill 30
Assemblies et modules
■ .Net
◆ La CLR impose que tous les types appartiennent à une assembly
◆ Lʼassembly est lʼunité minimale de déploiement de code sur la plateforme .NET
◆ Le module est la plus petite unité compilable:
❖ Peut contenir des meta-data, du code et des ressources
■ C#
◆ Compilateur : csc.exe
◆ Peut émettre des :
❖ Modules => /target:module
❖ DLL => /target:library
❖ Exécutables console => /target:exe
❖ Exécutables windows => /target:winexe
◆ pour examiner des assemblies : ildasm.exe
© 2007, M. Riveill 31
Mon premier assembly : Hello World
using System;
class Bonjour {
public void Print () {
Console.WriteLine ("Bonjour !!!...");
}
}
class Hello {
static void Main( ) {
Bonjour b = new Bonjour();
Console.WriteLine("Hello world");
// taper ʻenterʼ pour finir
Console.ReadLine();
b.Print();
}
}
© 2007, M. Riveill 32
Le même en deux assemblies
using System;
namespace BonjourNS {
public class Bonjour {
public void Print () {
Console.WriteLine ("Bonjour !!!...");
}}}
using System;
using BonjourNS;
namespace Hello {
class Hello {
static void Main( ) {
Bonjour b = new Bonjour();
Console.WriteLine("Hello world");
Console.ReadLine();
b.Print();
}}}
■ Conséquence
◆ Ce fichier dépourvu d'un manifeste de l'assembly ne peut pas être chargé par le CLR
◆ Il peut être incorporé dans le manifeste d'un assembly au moyen de /addmodule.
© 2007, M. Riveill 34
Le même en un seul assembly
mais deux fichiers
using System;
namespace BonjourNS {
internal class Bonjour {
public void Print () {
Console.WriteLine ("Bonjour !!!...");
}}}
using System;
using BonjourNS;
namespace Hello {
class Hello {
static void Main( ) {
Bonjour b = new Bonjour();
Console.WriteLine("Hello world");
Console.ReadLine();
b.Print();
}}}
© 2007, M. Riveill 36
Assemblies et modules
Signature
© 2007, M. Riveill 37
Pourquoi signer un assembly ?
© 2007, M. Riveill 38
Les clés
sn.exe -k publicprivate.snk
Public Key
public.snk
(128 bytes + 32 bytes header)
© 2007, M. Riveill 39
Signature dʼun assembly
Public Key
Espace
PE/COFF (128 bytes +
libre
32 bytes header) Code
Header
CLR Metadata
fichierdecles.snk
sn.exe -R MaLib.dll fichierdecles.snk
MaLib.dll
Public Key
Public Key (128 bytes + 32
PE/COFF (128 bytes + Signature bytes header)
32 bytes header) Code
Header Private Key
CLR Metadata (436 bytes)
© 2007, M. Riveill 41
Signature retardée
© 2007, M. Riveill 42
Examinateur de code : Ildasm.exe
© 2007, M. Riveill 43
Déploiement dʼun assembly
■ Le multi-version nécessite
1. Donner un numéro de version
◆ Utilisation dʼun attribut : <Assembly: AssemblyVersion ("1.0.1.0")>
◆ Majeure.Mineure.Génération.Révision
2. Donner un ʻnom fortʼ (ʻstrong nameʼ)
3. Publier lʼassembly dans la gac (ʻGlobal Assembly Cacheʼ)
© 2007, M. Riveill 45
Assemblies et modules
Fichier de configuration
© 2007, M. Riveill 46
Assemblies et modules
Redirection
© 2007, M. Riveill 47
Assemblies et modules
Redirection: bindingRedirect
© 2007, M. Riveill 48
Assemblies et modules
Téléchargement: codeBase
© 2007, M. Riveill 49
Assemblies et modules
Conclusion
© 2007, M. Riveill 50
Demo
ʻHello worldʼ
Désassembleur
Signature dʼun assembly
Publication - Gestion de version
Types
■ Type valeur
◆ Contient des données int i = 123;
◆ Ne peut être ʻnullʼ string s = "Hello world";
◆ Primitives int i; float x;
◆ Enumérations enum State { Off, On }
◆ Structures struct Point {int x,y;}
■ Type référence
◆ Contient des références
vers des objets
i 123
◆ Peut être ʻnullʼ
◆ Racine object s "Hello world"
◆ Chaîne string
◆ Classes class Foo: Bar, IFoo {...}
◆ Interfaces interface IFoo: IBar {...}
◆ Tableau string[ ] a = new string[10];
◆ Delegates delegate void Empty();
© 2007, M. Riveill 53
Types
Un seul système de type
© 2007, M. Riveill 54
Types
Conversions
■ Conversion implicite
◆ Fonctionne automatiquement et sans possibilité dʼéchec
◆ Pas de perte de précision/dʼinformation
■ Conversion explicite
◆ Nécessite un ʻcastʼ
◆ Peut être refusée
◆ De lʼinformation/précision peut être perdue
int x = 123456;
long y = x; // implicit
short z = (short)x; // explicit
double d = 1.2345678901234;
float f = (float)d; // explicit
long l = (long)d; // explicit
© 2007, M. Riveill 55
Types
Un système de type unifié
© 2007, M. Riveill 56
Types
Un système de type unifié
■ Bénéfice du boxing,
◆ Permet le polymorphisme pour tous les types (y compris les types valeurs)
◆ Les classes ʻcollectionsʼ fonctionnent avec tous les types
◆ Elimine la nécessité de construire manuellement des classes dʼencapsulation
◆ On trouve plein dʼexemple dʼutilisation dans le Framework .NET
■ Désavantage du boxing
◆ Performance
◆ Lʼutilisation de la généricité a remplacé la nécessité du boxing
❖ C++ templates – C# intrinsics - Java generics
object o = i; o System.Int32
123
int j = (int)o; j 123
© 2007, M. Riveill 57
Types
Méthodes définies sur Object
© 2007, M. Riveill 58
Types : classes et structures
this
class Person {
string name;
public Person(string name) {
this.name = name;
}
public void Introduce(Person p) {
if (p != this)
Console.WriteLine(“Hi, I’m “ + name);
}
}
© 2007, M. Riveill 59
Types : classes et structures
base
class Shape {
int x, y;
public override string ToString() {
return "x=" + x + ",y=" + y;
}
}
class Circle : Shape {
int r;
public override string ToString() {
return base.ToString() + ",r=" + r;
}
}
© 2007, M. Riveill 60
Classes et Structures
Constantes
© 2007, M. Riveill 61
Classes et Structures
Champs non modifiable (ʻread-onlyʼ)
© 2007, M. Riveill 62
Classes et Structures
Propriétés
© 2007, M. Riveill 63
Classes et Structures
Indexeurs
© 2007, M. Riveill 64
Types
Delegates
© 2007, M. Riveill 65
Delegates
© 2007, M. Riveill 66
Delegates multicast
■ Opérateurs += et -=
◆ Utilisés pour insérer supprimer une méthode à la liste du delegate
◆ Fonctionnent correctement avec les threads
© 2007, M. Riveill 67
Delegates
Multicast Delegates
}
attente
© 2007, M. Riveill 68
Delegate
Appel asynchrone
int resultat;
IAsyncResult asyncResult;
// création du delegate
monDelegate = new …
// appel du delegate
asyncResult = monDelegate.BeginInvoke(null, null);
delegate
// suite de l’activité
attente
© 2007, M. Riveill 69
Delegate
Appel asynchrone
// code du callback
public void callBack (IAsyncResult asyncResult) {
delegateAppele = asyncResult.AsyncState;
int resultat = delegateAppele.EndInvoke (asyncResult);
Console.WriteLine ("Valeur de retour du delegate {0}", resultat);
}
// création du callback
delegate
// création du delegate
monDelegate = new …
callBack
// appel du delegate
IAsyncResult asyncResult = monDelegate.BeginInvoke(asyncCallback,
monDelegate);
// suite de l’activité
© 2007, M. Riveill 70
Thread
Déclaration
} thread.join();
public void Activite() { }
// code de l’activité public void run() {
} // code de l’activité
} }
■ En C#, utilisation dʼun delegate (qui ne prend
}
aucun paramètre et rend aucune valeur)
© 2007, M. Riveill 71
Thread
Utilisation
© 2007, M. Riveill 72
Evènements
© 2007, M. Riveill 73
Evènements
© 2007, M. Riveill 74
Evènement
© 2007, M. Riveill 75
Evènements
Exemple coté composant (émetteur)
// Déclarer l’événement
public event SampleEventHandler click;
// Définition de la réaction
static void OkClicked (object sender,
EventArgs e) {
ShowMessage("You pressed the OK button");
}
public MyForm() {
// création du ‘button’ si nécessaire
okButton = new Button(...);
okButton.Caption = "OK";
// enregistrement de la réaction
okButton.Click +=
new EventHandler(OkClicked);
}
}
© 2007, M. Riveill 77
Evénement – un autre exemple
// constructeur
public EventFeuArgs(string piece, int force) {
this.piece = piece;
this.force = force;
}
}
© 2007, M. Riveill 78
Evénement - exemple
EventFeu(this, feuArgs);
}
}
© 2007, M. Riveill 79
Evènement - exemple
■ Utilisation
public class Test {
public static void Main () {
// Créer une instance de la classe qui lève les alarmes
Alarme monAlarme = new Alarme();
// Créer une instance de la classe Secours
Secours incident = new Secours(monAlarme);
// Utiliser la classe pour émettre quelque évènements
monAlarme.ActivationAlarme("Cuisine", 3);
// Créer une autre instance de la classe Secours
AutreSecours bis = new AutreSecours(nouvelleAlarme);
}
}
© 2007, M. Riveill 81
Demo
© 2007, M. Riveill 83
Les attributs
© 2007, M. Riveill 84
La réflexion / introspection
© 2007, M. Riveill 85
Introspection
Exemple
© 2007, M. Riveill 86
Attributs
Etendre les informations des types
■ Syntaxe:
Attribut sur
une assembly
Attribut sur
une classe
Attribut sur
un membre
Attribut sur
une méthode
Attribut sur
une propriété
© 2007, M. Riveill 87
Attributs
Exemple : Sérialisation
© 2007, M. Riveill 88
Attributs
Exemple : Sérialisation
© 2007, M. Riveill 89
Attributs
Exemple: Sérialisation
© 2007, M. Riveill 90
Attributs
Custom attributes
© 2007, M. Riveill 91
La reflection et les attributs
Custom attributes
[AttributeUsage (AttributeTargets.Class)]
public class MonAttributAttribute : Attribute {
private string codeCreePar = String.Empty;
public string CodeCreePar {
get { return (this.codeCreePar); }
set { this.codeCreePar = value; }
}
private int codeVersion = 0;
public int CodeVersion {
get { return (this.codeVersion); }
set { this.codeVersion = value; }
}
public MonAttributAttribute () {}
public MonAttributAttribute (string owner, int version) {
this.codeCreePar = owner;
this.codeVersion = version;
}
}
© 2007, M. Riveill 92
La reflection et les attributs
Custom attributes
MonAttributAttribute monAttribut =
(MonAttributAttribute) Attribute.GetCustomAttribute
(type, anInstance.GetTypes(), false);
© 2007, M. Riveill 93
La reflection et les attributs
Conclusion
© 2007, M. Riveill 94
Demo
Attributs et réflexivité
Troisième partie
La sécurité
Les transaction
Lʼaccès aux données :
une architecture à deux niveaux
© 2007, M. Riveill 97
Mode connecté
© 2007, M. Riveill 98
Mode déconnecté
© 2007, M. Riveill 99
Architecture 3 parties
XML
Service Service
Web Web
M L
X
XML
L
XM
XML
Service
Web Service
Web
Site Web
M L
HT
Client Client
XML
© 2007, M. Riveill 103
Accès Universel aux services
Web Application
Server Server
Web
Service Business
Object Back Office
EAI And
& Enterprise
Business Connectors Systems
Object
Web
Service
Business
Object
Contrat
Je recherche
SOAP
Quel est le format d’
d’appel du
service que tu proposes?
XML
Voici mon contrat (WSDL)
using System.Web.Services;
public class MathService : WebServices {
[WebMethod]
public int Add(int num1, int num2) {
return num1 + num2;
}
}
Service Web
Proxy Client
Serveur .cs .cs
http-IIS
Service Application
Client
créer le stub*
Stub en utilisant Client
.java WSDL2Java .java
Service Application
■ C#
wsdl URL_du_service_web?WSDL
■ Java…
java org.apache.axis.wsdl.WSDL2Java 'URL_du_service_web?WSDL '
■ ASP.Net
◆ Fait partie de .NET Framework
◆ Construit, déploie et exécute des applications et des services Web
◆ Les applications Web Visual Studio .NET prennent directement en
charge ASP.NET
SQL
ASP.Net Server
Assembly .Net ADO.Net
Web Form
.aspx .cs
Fichier
Parser Moteur Générer
classe
ASPX Code-
behind
Réponse
Classe
Réponse de la
page Instanciation,
traitement et rendu
© 2007, M. Riveill 113
Web Forms
code
<balises> <balises> code
Page_Load
Evénements de contrôle
1. Evénements de Textbox1_Changed
modification
2. Evénements Button1_Click
d’action
Page_Unload
Page libérée
© 2007, M. Riveill 115
Web Forms
Contrôles serveur
■ 45 contrôles intégrés
◆ Génère du HTML 3.2
◆ On retrouve les contrôles usuels
❖ textbox, checkbox, radio, button
■ Mode
◆ InProc : variables de session conventionnelles. Stockées en mémoire sur
le serveur Web
◆ StateServer : les sessions sont stockées sur un serveur externe, en
mémoire
◆ SqlServer : les sessions sont stockées dans une base de données SQL
❖ Améliore grandement la fiabilité
▲ Lʼétat de session peut survivre à un crash ou à un redémarrage
mode="sqlserver"
cookieless="false"
timeout="20"
sqlConnectionString="data source=127.0.0.1;
user id=sa;password=""
stateConnectionString="tcpip=127.0.0.1:42424"
/>
Assemblage
■ Chaque fois quʼun assembly est chargé dynamiquement
Chargement de
◆ lʼenvironnement doit produire un certificat lʼassemblage
◆ Ce certificat permet dʼidentifier la politique de sécurité qui sera
appliquée
Obtention
■ Voici quelques formes de certificat des
certificats
◆ A chaque certificat correspond une classe du framework qui le décrit
◆ System.Security.Policy.Site : le site dʼoù provient le composant
◆ System.Security.Policy.Url : une URL qui identifie la ressource
◆ System.Security.Policy.Zone : même concept que les zones dʼInternet
Explorer.
◆ System.Security.Policy.Publisher : certificat déposé de lʼassembly
◆ System.Security.Policy.StrongName : Strong Name: généré à partir de
sn.exe (Composants .Net)
◆ System.Security.Policy.Hash : la valeur de hashage dʼun assembly
(généré par SHA1) Exécution
◆ System.Policy.ApplicationDirectory : le répertoire qui contient le code
Assemblage
■ 3 groupes de permissions
Chargement de
◆ Permissions dʼaccès aux ressources
lʼassemblage
❖ Si lʼobjet est une ressource de tel type alors je peux faire cela
▲ System.Security.Permission.FileIOPermission permet le contrôle des accès aux
fichiers et répertoires
◆ Permissions associées aux certificats Obtention
des
❖ Si lʼobjet a ce certificat alors je peux faire cela certificats
◆ Meta permission
❖ Permissions accordées au gestionnaire de sécurité Certificats
■ Application des politiques de sécurité
◆ Obtenir un ensemble de permissions en fonction des certificats Application
des
◆ 4 politiques de sécurité politiques de
❖ Entreprise sécurité
❖ Machine
▲ Configuré par lʼadministrateur de la machine
❖ Utilisateur
▲ Configuré par lʼutilisateur
▲ Sʼapplique au code géré par les processus de lʼutilisateur
Exécution
❖ Domaine dʼapplication
▲ Configuré par lʼapplication
◆ les permissions accordées à un assembly sont lʼintersection des permissions
accordées pour chaque politique
■ Se configure dans : Configuration Microsoft .NET Framework
◆ Dans le répertoire : Outils dʼadministration
© 2007, M. Riveill 124
Sécurité dʼaccès au code
3ème étape : restriction des permissions à lʼexécution
Assemblage
■ Si les droits sont suffisants, alors Chargement de
◆ Lʼobjet est couplé lʼassemblage
◆ Le code est exécuté
■ Il est possible temporairement de retreindre des droit Obtention
◆ Exemple : garantir que du code tiers, dont on a moyennement confiance des
certificats
accède à des zones sensibles
Certificats
◆ Le composant B accède à une ressource O
◆ B a les droits pour accéder à O Application
des
politiques de
◆ Le composant A appelle le composant B sécurité
composant
partagé
clé
privée clé
publique
composant A
composant
partagé
// code du composant A ou B
[assembly:AssemblyKeyFile("keypair.dat")]
public class Caller {
public static void Main() {
try {
Console.WriteLine(SharedComponent.GetInfo());
} catch(Exception e) {
Console.WriteLine("\nException occurred: {0}\n", e);
}
}
}
clé
privée clé
publique
composant A
composant
partagé
try {
o.AdminMethod();
} catch(Exception e) {
if (e is SecurityException
& ((SecurityException)e).PermissionType
== typeof(PrincipalPermission)) {
// On n’avait pas de droit d’exécuter la méthode
}
…
}
using System;
using System.Reflection;
using System.EnterpriseServices;
using System.Security.Permissions;
[assembly:ApplicationName("security sample")]
[assembly:AssemblyKeyFile("keypair.dat")]
public class aClass : ServicedComponent {
public void aclMethod () {
SecurityCallContext sec =
SecurityCallContext.CurrentCall;
if (sec.IsCallerInRole("Big boss")) {
// corps de la méthode
// Seul les ‘principaux’ avec le rôle
// adéquat peuvent exécuter cette méthode
} else {
throw new Exception ("Vous n’avez pas le droit");
}
}
Objet .Net A
.Net Client Niveau
Objet .Net B Implémentation
.Net Framework
Contexte
Contexte pour
COM+ Services pour Niveau
lʼobjet .Net B
lʼobjet .Net A Service
DEVELOPMENT DEPLOYMENT
Source code Assembly
public static void Main(String[] args )
PE header + MSIL +
{ String usr; FileStream f; StreamWriter w;
try {
PEVerify
usr=E nvironment.GetEnvironmentVariable("USERNAME" );
f=new F ileStream(“ C :\\test.txt",FileMode.Create) ;
Compiler
w=new StreamWriter(f);
public static void Main(String[] args )
w.WriteLine(usr)
{ String
; usr; FileStream f; StreamWriter w;
w.Close(); try {
} catch (Exceptionusr=E
e){ nvironment.GetEnvironmentVariable("USERNAME" );
Metadata + EH Table
Console.WriteLine("Exception:"+e.ToString(
f=new F ileStream(“ C :\\test.txt",FileMode.Create)
)); ;
} w=new StreamWriter(f);
} w.WriteLine(usr) ;
w.Close();
} catch (Exception e){
Console.WriteLine("Exception:"+e.ToString( ));
}
}
Evidence
EXECUTION
Host Assembly info
GAC,
Policy Assembly app. directory
Module
Manager + Class list Loader
Policy
Permission request
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<m scorlib>
<security>
<policy>
Granted
(a
<P olicyLevel version="1">
<C odeGroup class="U nionCodeGroup"
version="1"
PermissionSetName="Nothing"
Name="All_Code"
Description="Code group
ss
(class)
grants no permissio
ns and forms the root of the code group tree.">
permissions
<IMembershipCondition clas
s="A llMembershipCondition"
version="1"/>
CLR Services
<CodeGroup class="U nionCodeGroup"
em
version="1"
PermissionSetName="FullTrust"
(method) GC
bl
y)
Exception
Class Vtable + JIT + Native code Class init
Class info + GC table Security
Loader verification
© 2007, M. Riveill 140
Demo
Sécurité
Transactions
Transactions
■ Principaux composants
◆ processus MTS
❖ installation, création, cycle de vie, contexte d ʼexécution, sécurité, activation
juste à temps (just-in-time)
◆ MS Distributed Transaction Coordinator (DTC)
❖ service de gestion de transactions réparties orienté objet
❖ gère aussi les transactions liées aux serveurs de bases de données
■ NotSupported [Transaction(TransactionOption.NotSupported)]
◆ Indique que cet objet sʼexécute en dehors dʼun contexte transactionnel.
◆ Si le client est dans une transaction alors lʼobjet nʼest pas inclus dans la transaction
■ Supported [Transaction(TransactionOption.Supported)]
◆ Indique que cet objet peut être inclue dans une transaction.
◆ Si le client est dans une transaction alors lʼobjet est inclus dans la transaction ; sinon lʼobjet
sʼexécute hors transaction.
■ RequiresNew [Transaction(TransactionOption.RequiresNew)]
◆ Indique que cet objet nécessite une nouvelle transaction.
◆ Si le client est dans une transaction alors lʼobjet démarre une nouvelle transaction.
using System;
using System.Runtime.CompilerServices;
using System.EnterpriseServices;
using System.Reflection;
■ 2002
◆ .NET Framework 1.0
■ 2003
◆ .NET Framework 1.1
■ Fin 2005
◆ .NET Framework 2.0
■ Fin 2006
◆ .NET Framework 3.0
■ http://wpf.netfx3.com
■ Système dʼinterface graphique
◆ Unifie de lʼinterface utilisateur, documents, médias
◆ Utilise un moteur de composition pour permettre lʼaffichage vectoriel
◆ Modèle de programmation déclarative basé sur XAML (eXtensible Application Markup
Language)
❖ Séparation des rôles entre designer et développeur
■ http://wcf.netfx3.com/
■ Unifie le développement des applications distribués
◆ Multi-protocoles
◆ Sûres
❖ intérité, confidentialité, authentification
autorisation, audit de la communication
◆ Fiables
❖ transactions, isolation, concurrence
■ Approche orientées services
◆ Services isolés
◆ Indépendant de la localisation
◆ Indépendant du transport, du protocole et du format
◆ Indépendant des plateformes et de l’impléentation
◆ Doit pouvoir fonctionner quel que soit les dispositifs de monté en charge
mis en place (ferme de processeur)
◆ Doit pouvoir fonctionner même lorsque l’ne des parties n’est pas
disponible
■ http://wf.netfx3.com
■ Permet la programmation de workflow selon
différents paradigmes
Rule1 Step1
Data
Rule2 Step2
■ http://cardspace.netfx3.com
■ Un meta système dʼindentité
◆ Carte dʼidentités virtuelles
◆ Fait suite à Passport et reprend des éléments de WS-security, WS-Trust
◆ Identité = ensemble dʼaffirmations
❖ Affirmation = qq chose que qq dit de moi
ou qq chose que je dis de moi
◆ Chaque identité est représenté par une carte (logotype - RFC3709)
❖ Un utilisateur peut avoir plusieurs identités / cartes
▲ Une carte anonyme, émise par moi avec des informations génériques et fausses
▲ Une carte personnelle, émise par moi mais avec des informations vraies
▲ Une carte émise par un fournisseur dʼidentité réputé
▲ Des cartes spécialisées (banques, réputation sur eBay, …)
■ On continue
lʼenrichissement
◆ Ou lʼengraissement
◆ On sʼéloigne de la norme
dʼorigine
■ 3 nouveautés
◆ LINQ (Language INtegrated
Query)
◆ Nouvelle version dʼASP
◆ CLA Add-in framework
■ Et dʼautres améliorations
plus mineures
■ Principales fonctionnalités
◆ Découvertes
◆ Activation
◆ Isolation
◆ Déchargement
◆ Sandbowing
Le multi-langage
Comparaison avec le monde Java
Le multi-langage est une réalité
cplusplus ClassJava
Print Print
Cplusplus Java
Héritage
Csharp
Print
Main
Csharp Print2 Csharpfromjava
On peut écrire des classes qui héritent de classes écrites dans un autre langage
L3 client
cadriciel
L1
L2 extension
contrat
© 2007, M. Riveill Etude réalisées par Antoine.Beugnard@enst-bretagne.fr
165
Redéfinition / surcharge
■ Redéfinir
◆ Modifier une méthode (corps)
◆ Spécialiser des arguments (covariance)
◆ Généraliser des arguments (contravariance)
■ Surcharger
◆ Définir une nouvelle méthode en utilisant le même nom (ou le
même symbole)
■ Un programme
Up u = new UpDown
d = new Down
Up ud = new Down
u.ctv(new Top) ; …
// soit 18 appels…
C++ u d ud
cv(Top) Up Error Up
Cv(Middle) Up Down Up
cv(Bottom) Up Down Up
ctv(Top) Error Error Error
ctv(Middle) Error Down Error
ctv(Bottom) Up Down Up
C# u d ud
cv(Top) Up Up Up
Cv(Middle) Up Down Up
cv(Bottom) Up Down Up
ctv(Top) Error Error Error
ctv(Middle) Error Down Error
ctv(Bottom) Up Down Up
VB u d ud
cv(Top) Up Up Up
Cv(Middle) Up Down Up
cv(Bottom) Up Down Up
ctv(Top) Error Error Error
ctv(Middle) Error Down Error
ctv(Bottom) Up Up Up
C++ / C# / VB u d ud
cv(Top) Up Error | Up | Up Up
Cv(Middle) Up Down Up
cv(Bottom) Up Down Up
contrat
■ Utilisation de .NET
◆ Visual Basic, C# et C++
Up 3 récepteurs potentiels :
Top Up u = new Up;
cv(Top t) ^Up
ctv(Bottom b) ^Up Down d = new Down;
L1 Up ud = new Down;
6 invocations :
Middle L2 r.cv(new Top);
Down r.cv(new Middle);
cv(Middle m) ^Down Redéfinition covariante
r.cv(new Bottom);
ctv(Middle m) ^Down Redéfinition
r.ctv(new contravariante
Top);
Bottom r.ctv(new Middle);
r.ctv(new Bottom);
L1 C# VB C++
L2
C# C# C# C++
VB C# C# C++
C++ C# C# C++
L1 C# VB C++
L2
C# VB VB C++
VB VB VB C++
C++ VB C# C++
L1 C# VB C++
L2
C# Nouveau Nouveau Nouveau
langage langage langage
VB C++ C++ C++
VB/C++ (???) u d ud
cv(Top) Up Erreur Up
Cv(Middle) Up Down Up
cv(Bottom) Up Down Up
ctv(Top) Error Error Error
ctv(Middle) Error Down Error
ctv(Bottom) Up Up Up
Signature inconnue !
L1 : cadriciel – L2 : extension
L3 : Client (C#, VB, C++)
L1 C# VB C++
L2
C# Client Client Cadriciel
Client Client Cadriciel
Nouveau langage Nouveau langage Nouveau langage
Attention : en .NET, les composants ne peuvent pas être considérés comme des
boites noires…
© 2007, M. Riveill 180
Java vs .Net
Performances comparatives
http://www.dotnetguru.org/articles/Comparatifs/benchJ2EEDotNET/J2EEvsNETBench.html
Historique
.Net J2EE
Propriétaire (norme Standard (contrôlée par
Technologie
ECMA / ISO) JCA)
Vendeurs Microsoft 30+
Indépendant de la plate-
Plate-forme cible Windows
forme
Langage de
C# et les autres Java
programmation
Windows CE/ .NET Java 2 Micro-Edition
Terminaux léger
compact Framework (J2ME)
J2EE – Jonas (par
Framework .Net
exemple)
Plate-forme (gratuite) Cassini
Tomcat
MSDE
MySQL
© 2007, M. Riveill 186
Quelques éléments de comparaison
.Net J2EE
Windows 2000/XP + IBM WebSphere
Services applicatifs Application Server
Serveur dʼapplication
(IIS,NLB,MSMQ,COM+) + BEA WebLogic
.NET Framework Application Server
IBM WebSphere
Environnement de Application Developper
développement Visual Studio.Net BEA CAJUN
(commerciaux) Borland JBuilder
Oracle JDevelopper
Environnement de
développement WebMatrix Eclipse
(gratuit)
.Net J2EE
Langage interprété MSIL (typé) Java Bytecode
Environnement dʼexécution CLR JVM/JRE
Client ʻgraphiqueʼ MFC Swing
Pages dynamiques ASP.Net JSP/Servlets
Composants métiers Managed .Net component EJBs
Intégration base de données ADO.Net EJB-SQL/JDBC
Intégration message MSMQ Msg EJBs / JMS
Intégration Web service Oui Oui
Java Connector Architecture-
Intégration application COM
JCA
Service miffleware
(persistance, sécurité, OUI (COM+) OUI
transaction, …)
© 2007, M. Riveill 188
Les plates-formes
VB C++ C# JScript J#
Common Language
Java Language
Specification
ASP.NET
Java Enterprise API Windows
Visual Studio.NET
Web Forms
(EJB, JSP, JDBC, JNDI, JTS, etc.) Forms
Web Services
Environment d’Exécution
Système d’exploitation
© 2007, M. Riveill 190
Les Serveurs dʼApplications Java
J2EE
.NET Framework
Windows
© 2007, M. Riveill 192
Pet Store
Lignes de codee