Vous êtes sur la page 1sur 197

La plate-forme .

Net
Introduction
Michel RIVEILL
Universit de Nice Sophia Antipolis
riveill@unice.fr - http://www.polytech.unice.fr/~riveill
3 2007, M. Riveill
.NET
! Introduction
" La plate-forme
" Le C.L.R (Common Language Runtime)
! Le langage C# (et le CLR)
" Assemblies et module
" Types rfrences et valeurs
" Rexion et attributs
" Delegates et Events
! Les applications Web
" L"accs aux donnes
" Les services Web
" Les pages dynamiques
! Les services techniques
" La scurit
" Les transactions
! .Net 2.0, 3.0, 3.5
! Evaluation
" Le multi-langage dans .Net
" J2EE vs .Net
! Pour aller plus loin
Premire partie
Introduction
La plate-forme .Net
Le C.L.R (Common Language Runtime)
5 2007, M. Riveill
.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
rfrencs
# Services offerts par des sites web
" De nouveaux terminaux compltent 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 systme d"exploitation Windows
# Base de donnes, messages, Intgration, proxy, scurit, mobilit, gestion du
contenu, orchestration des services,
" .NET Building Block Services
# .NET My Services des services fournis par Microsoft
$ Passport (authentication)
$ Hailstorm (prols utilisateurs)
$ .NET Alerts (service d"alerte)
" Objectif : rendre la construction d"applications Web aises
# Par assemblage de Web services
6 2007, M. Riveill
La plate-forme .NET
Web Form
.NET Framework
Windows
Web Service
.NET Foundation
Web Services
Your Internal
Web Service
Third-Party
Web Services
.NET Enterprise
Servers
Clients Applications
Protocoles: HTTP,
HTML, XML,
SOAP, UDDI
Outils :
Visual Studio.NET,
Notepad
7 2007, M. Riveill
Services Web
Une volution du Web
Generation 1
Static HTML
HTML
Generation 2
Web Applications
HTML
HTML, XML
HTML, XML
Generation 3
Web Services
! Des composants applicatifs accessibles partir des standards du Web
! Le coeur de l"architecture .NET
! Offrir des services l"aide du Web
! Construit avec les standards actuels
" HTTP, XML, SOAP, UDDI, WSDL,
8 2007, M. Riveill
Le framework .NET
! Un ensemble de technologies pour
dvelopper et utiliser des
composants :
" Formulaires Web
" Services Web
" Applications Windows
! Des outils pour dvelopper des
applications
" Dveloppement
" Mise au point
" Dploiement
" Maintenance
Common Language Specification
Common Language Runtime
VB C++ C#
ASP.NET: Web Services
and Web Forms
JScript
Windows
Forms
.NET Framework Base Classes
ADO.NET: Data and XML
V
i
s
u
a
l

S
t
u
d
i
o
.
N
E
T
9 2007, M. Riveill
La plateforme .NET
Win32
C++
VB
COM
DCOM
Intgration
en mmoire
Intgration
en mmoire
Intgration
entre machine
CLR
Service WEB
.NET Remoting
Dans .Net 3.0, le choix Service Web / .NET Remoting se fait au dploiement
10 2007, M. Riveill
La plateforme .Net
Common Language Interface
CLI = IL + bibliothque
Common Language Runtime (CLR)
ECMA / ISO
Windows XP Windows 2000 NT 4.0 Windows 98, Me PocketPC Free BSD
Implmentes par MS
Linux
11 2007, M. Riveill
Le .Net Framework
Intermediate
Language (IL)
Common Language
Runtime (CLR)
Base Classes
Accessible depuis tous les langages Accessible depuis tous les langages
Entre le langage intermdiaire
(IL) et le machine virtuelle (CLR)
se trouvent les classes du .Net
Framework
Ces classes sont accessibles
par tous les langages puisque
accessibles depuis lIL
Une partie de ces classes ont
t intgres dans les
spcifications
du CLR
Modle dobjet commun
Types unifis
Meta-Data
Modle dexception commun
12 2007, M. Riveill
VS.NET VS.NET
Common Language Runtime Common Language Runtime
System System
System.Data (ADO.NET) System.Xml
Design
ADO
Adapters
SQL
Globalization
Diagnostics
Configuration
Collections
Resources
Reflection
Net
IO
Threading
Text
ServiceProcess
Security Runtime
InteropServices
Remoting
Serialization
XPath
XSLT
Serialization
System.Drawing
JIT
GC
MSIL
App Domain Loader
Common Type System Class Loader
System.Web
Configuration
SessionState
Caching
Security
System.Web.Services
Description
Protocols
UI
HtmlControls
WebControls
Discovery
C#
VC/MC++
Imaging
Drawing2D
Text
Printing
JScript
VB
Platform Abstraction Layer Platform Abstraction Layer
Boot Loader
Sync Threads
Networking
Timers Filesystem
System.WinForms
Design ComponentModel
Debugger
Designers
SDK Tools SDK Tools
CorDBG
ILAsm
ILDbDump
SN
ILDAsm
MetaInfo
PEVerify
E
C
M
A
-
3
3
5
E
C
M
A
-
3
3
4
CLI Standards
13 2007, M. Riveill
Le framework .NET
Les classes du framework
VS.NET VS.NET
Common Language Runtime Common Language Runtime
System System
System.Data (ADO.NET) System.Xml
Design
ADO
Adapters
SQL
Globalization
Diagnostics
Configuration
Collections
Resources
Reflection
Net
IO
Threading
Text
ServiceProcess
Security Runtime
InteropServices
Remoting
Serialization
XPath
XSLT
Serialization
System.Drawing
JIT
GC
MSIL
App Domain Loader
Common Type System Class Loader
System.Web
Configuration
SessionState
Caching
Security
System.Web.Services
Description
Protocols
UI
HtmlControls
WebControls
Discovery
C#
VC/MC++
Imaging
Drawing2D
Text
Printing
JScript
VB
Platform Abstraction Layer Platform Abstraction Layer
Boot Loader
Sync Threads
Networking
Timers Filesystem
System.WinForms
Design ComponentModel
Debugger
Designers
SDK Tools SDK Tools
CorDBG
ILAsm
ILDbDump
SN
ILDAsm
MetaInfo
PEVerify
14 2007, M. Riveill
Le CLR et ses implmentations
! Framework .Net est sufsant pour programmer, c"est la version
ofcielle
" pas accs aux sources
" Il faut aussi prendre le SDK
" Webmatrix permet d"avoir une plate-forme de dveloppement gratuite
# Intgre serveur web et base de donnes
" Visual Studio .Net, SQL serveur
# Disponibles pour les tudiants de Polytech"Nice-Sophia (licence MSDN AA)
! ROTOR est une implmentation Microsoft de la technologie .Net
" http://msdn.microsoft.com/sscli
" implmentation complte de standard ISO/ECMA (c"est un sur ensemble de la norme)
" Fonctionne avec FreeBSD, Mac OS X et Windows XP (licence de type BSD)
" 100% du code source est disponible
" Il n"y a pas d"implmentation correcte de ROTOR pour Linux
15 2007, M. Riveill
CLR et les implmentations
non Microsoft en 2003
! Ximian : MONO est un projet indpendant
" http://www.go-mono.org
" compatibilit avec les produits .Net
" fonctionne sur Linux (licence GPL)
" actuellement : C#, JIT trs efcace, pas d"IDE
! DotGNU : Portable .Net
" http://www.southern-storm.com.au/portable_net.html
" implmentation du standard ISO/ECMA
" fonctionne sous GNU/Linux, c"est un projet GNU
# mais aussi sous Windows, Solaris, NetBSD, FreeBSD, and MacOS X.
# le runtime a t test sur les processeurs x86, PowerPC, ARM, Sparc, PARISC,
s309, Alpha, and IA-64
" Actuellement : C#, pas de JIT, de nombreux outils
! Il y en a d"autre
16 2007, M. Riveill
Common Language Runtime
Buts
! Dveloppement de services
" Permettre une interoprabilit entre les langages
" Augmenter la productivit
# chacun crit dans le langage qu"il matrise, le plus adapt,
! Services dploiement
" Simple, sr
" Gestion des versions NO MORE #DLL HELL"
! Services l"excution
" Performance
" Extensibilit
" Sret et disponibilit
" Scurit
17 2007, M. Riveill
Source Code
C++, C#, VB or any
.NET language
csc.exe or vbc.exe
Compilateur
Assembly
DLL or EXE
Common Language Runtime
Compilation
18 2007, M. Riveill
Common Language Runtime
Assemblages - Assemblies
! Assembly : archive
" Unit logique de dploiement (composants de la machine virtuelle)
" Contient Manifest, Metadata Type, code IL et autres ressources
! Manifest : chier de description de l"assemblage
" Metadata propos des composants prsent dans un assembly (version, types,
dpendances, etc.)
! Metadata Type
" Dnition complte de tous les types prsent dans l"assembly : attributs, mthodes,
paramtres, ressources
! code IL : langage intermdiaire typ
" Tous les langages sont compils en IL (managed code)
" IL est toujours compil en code natif avant excution (JIT compiler)
! Ressources
" .bmp, .jpg
19 2007, M. Riveill
Assemblies
Components of an Assembly
Assembly = un fichier Assembly = plusieurs fichiers
Manifest
Metadata
MSIL
File1.dll
Metadata
MSIL
File2.dll
Graphic.jpg
Resource
Logo.gif
Resource
Manifest
File3.dll
20 2007, M. Riveill
Common Language Runtime
Modle d"excution
CLR
VB
Source
code
Compiler
C++ C#
Assembly Assembly Assembly
Operating System Services
IL
Common Language Runtime JIT Compiler
Compiler Compiler
Native
code
Managed
Code
Managed
Code
Managed
Code
Unmanaged
Code
CLR Services
Ngen
21 2007, M. Riveill
Common Language Runtime
Services
! Gestion du Code
! Conversion du code MSIL en
natif
! Chargement et excution du
#managed code"
! Cration et gestion des
metadata
! Contrle des types
! Insertion et excution des
politiques de scurit
! Gestion mmoire
! Gestion multi-langage des
exceptions
! Interoprabilit entre les
objets du framework .NET et
les objets COM et les DLLs
Win32
! Liaison tardive
! Services pour les
dveloppeurs (proling,
debugging, etc.)
22 2007, M. Riveill
Common Language Runtime
23 2007, M. Riveill
Les langages sur .Net
VB C++ C#
*.vb *.cpp *.cs *.?
Intermediate Language (IL)
Indpendant de la plate-forme hardware Indpendant de la plate-forme hardware
Respectent la Respectent la
Common Language Specification (CLS) Common Language Specification (CLS)
! Perl
! Python
! Cobol
! Haskell
! ML
! Jscript
! Ada
! APL
! Eiffel
! Pascal
! Fortran
! ! Managed C++ Managed C++
! ! Visual Basic Visual Basic
! ! C# C#
! ! SmallTalk SmallTalk
! ! Oberon Oberon
! ! Scheme Scheme
! ! Mercury Mercury
! ! Oz Oz
! ! Objective Caml Objective Caml
! ! J# J#
! !
24 2007, M. Riveill
La plate-forme .NET
Windows 98/Me
NT/2000/XP
Linux
(Mono)
.NET CLR .NET CLR
Autre
.NET CLR
.NET Framework Libraries
Code Source
(C#, C++, VB.NET, J++, Cobol,
Smalltalk, Eiffel, etc.)
Managed Code
(MSIL)
.NET CLR .NET CLR .NET CLR
.NET Compact Framework Libraries
CLS/CTS
25 2007, M. Riveill
.NET Compact Framework
X86 SHx MIPS ARM
Windows CE .NET
Autre Architecture/CPU ?
Autre plate-forme/SE ?
.NET Compact Framework
http://morpheus.developpez.com/cfdotnet/
26 2007, M. Riveill
Compact Framework .NET
! Mme philosophie que le Framework .Net
" Sous-ensemble du Framework .NET et du Common Language Runtime.
" Code intermdiaire, JIT compiler, possibilit de code natif
# Excution de programmes indpendants du matriel et des systmes
d'exploitation
" Prise en charge des principaux protocoles rseaux et connexion avec les services
Web
! Mais quelques spcicits
" Contient des classes spcialement conues son intention
" Optimis pour les dispositifs ayant :
# Alimentation par batterie
# Espace de travail compris entre 128 Ko et 1 Mo en RAM dynamique
# Disque dur facultatif
! En consquence
" Une application Compact Framework .NET peut s'excuter sur le Framework .NET si :
# Les assemblys ne sont pas signs (pas le mme mcanisme)
# Pas d"utilisation des classes spciques (exemple IHM pocket PC)
27 2007, M. Riveill
Quelques singularits
! COM interop et fonctions de rappel:
" Le Compact Framework .NET n'assure pas l'interoprabilit avec les objets COM, mais vous pouvez utiliser PInvoke (platform invoke) pour accder des fonctions DLL
natives qui, leur tour, peuvent appeler des objets COM.
! Rpertoire en cours:
" La fonctionnalit de rpertoire en cours est absente sur les priphriques qui excutent Windows CE .NET ; par consquent, le .NET Compact Framework ne prend pas en
charge les mthodes Directory.GetCurrentDirectory et Directory.SetCurrentDirectory.
! Donnes:
" Le Compact Framework .NET fournit une implmentation de sous-ensemble de ADO.NET et inclut le fournisseur de donnes SQL Server CE .NET. L'espace de noms
System.Data.OleDb n'est pas pris en charge.
! Tableaux:
" Au contraire de certains langages, le Common Language Runtime ne prend pas en charge les limites infrieures autres que zro et lve une exception
MissingMethodException si le premier lment d'un tableau n'est pas zro.
! ASP.NET:
" Le Compact Framework .NET est essentiellement une plate-forme de client labor et ne prend pas en charge ASP.NET.
! Assemblys et GAC (Global Assembly Cache) :
" Dans sa version actuelle, le .NET Compact Framework ne prend pas en charge les assemblys composs de plusieurs modules, mais prend en charge les assemblys
satellites.
! Classes:
" Le .NET Compact Framework prend en charge un sous-ensemble de la Bibliothque de classes .NET Framework.
! Types de donnes et prcision en virgule ottante:
" Seule Math.Round(double a) est prise en charge ; Math.Round(double a, double b) n'est pas prise en charge.
! Dlgus:
" Les dlgus asynchrones, en particulier les mthodes BeginInvoke et EndInvoke, ne sont pas pris en charge.
! vnements:
" Le .NET Compact Framework prend en charge les vnements GotFocus et LostFocus, mais non les vnements Activated et Deactivated.
! Installation et chiers CAB:
" Vous pouvez utiliser des chiers CAB et crer des applications MSI pour distribuer vos applications.
! Test des performances:
" Le .NET Compact Framework ne prend en charge ni le prolage de code, ni le chier Perfmon.exe du Moniteur systme.
! Rexion:
" Le .NET Framework ne prend pas en charge l'espace de noms System.Reection.Emit.
! Srialisation:
" Pour des raisons de taille et de performances, le .NET Compact Framework ne prend en charge ni la srialisation binaire l'aide de BinaryFormatter, ni la srialisation
SOAP l'aide de SoapFormatter.
! Minuteries:
" Les mthodes Timer.Start et Timer.Stop ne sont pas prises en charge, mais vous pouvez dmarrer et arrter une minuterie en affectant la proprit Timer.Enabled la valeur
true or false.
Deuxime partie
Le langage C# (et le CLR)
Assemblies et module
Types rfrences et valeurs
Delegates et Events
Rexion et attributs
29 2007, M. Riveill
Languages
C#
! Nouveau langage cr pour .NET
! Proche de C++ et de Java
! Concepts cls :
" Composants orients
" Tout est objet
! Soumis l"ECMA pour standardisation
! Utilise les classes du framework .NET
! Mais surtout :
" C# est la dle reproduction des concepts de la machine virtuelle
de .Net, le CLR
30 2007, M. Riveill
C#
! Ce n"est pas une prsentation exhaustive de C#
" Nous n"allons pas regarder !
# Espace des noms, diffrents de Java
# Instructions, pas grand-chose de trs original
# La gestion des threads et la synchronisation
# L"accs aux objets distants, l"activation (Remoting vs RMI)
# Oprateurs, proche de C++
# Types gnriques (disponible 2.0)
# Commentaires
# Gnration de documentation (XML vs HTML JavaDoc)
#
" Nous allons regarder "
# Assemblies et module, signature, version
# Types rfrences et valeurs, boxing (disponible Java 1.5)
# Delegates et Events
# Rexion et attributs
31 2007, M. Riveill
Assemblies et modules
! .Net
" La CLR impose que tous les types appartiennent une assembly
" L"assembly est l"unit minimale de dploiement 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
# Excutables console => /target:exe
# Excutables windows => /target:winexe
" pour examiner des assemblies : ildasm.exe
32 2007, M. Riveill
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 nir
Console.ReadLine();
b.Print();
}
}
csc /target:exe HelloWorld.cs
33 2007, M. Riveill
Le mme en deux assemblies
using System;
namespace BonjourNS {
public class Bonjour {
public void Print () {
Console.WriteLine ("Bonjour !!!...");
}}}
csc /target:library Bonjour.cs
csc /target:exe /reference:Bonjour.dll HelloWorld.cs
using System;
using BonjourNS;
namespace Hello {
class Hello {
static void Main( ) {
Bonjour b = new Bonjour();
Console.WriteLine("Hello world");
Console.ReadLine();
b.Print();
}}}
34 2007, M. Riveill
Gnration d"un module
! Pas de gnration de manifeste de l"assembly :
" /target:module.
" Par dfaut, le chier de sortie porte l'extension .netmodule.
! Consquence
" Ce chier dpourvu 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.
! Si plusieurs modules sont crs dans une seule compilation :
" les types internal d'un module unique seront accessibles aux autres modules dans la
compilation.
" Lorsque le code d'un module rfrence des types internal dans un autre module, les
deux modules doivent tre incorpors dans un manifeste de l'assembly au moyen de
/addmodule.
35 2007, M. Riveill
Le mme en un seul assembly
mais deux chiers
using System;
namespace BonjourNS {
internal class Bonjour {
public void Print () {
Console.WriteLine ("Bonjour !!!...");
}}}
csc /target:Module Bonjour.cs
csc /target:exe /addmodule:Bonjour.netmodule HelloWorld.cs
using System;
using BonjourNS;
namespace Hello {
class Hello {
static void Main( ) {
Bonjour b = new Bonjour();
Console.WriteLine("Hello world");
Console.ReadLine();
b.Print();
}}}
36 2007, M. Riveill
Assemblies et modules
Porte
! La porte des types est spcie dans l"assembly
elle-mme
" public indique que le type est vu depuis l"extrieur de l"assembly
" internal indique que le type n"est vu que des autres types de cette
mme assembly
" private indique que le type n"est vu que de l"intrieur du type qui le
dclare
" static indique qu"il s"agit d"une variable commune toutes les
instances
37 2007, M. Riveill
Assemblies et modules
Signature
! La signature d"une assembly est base sur un couple Cl
publique/Cl prive
! Une assembly signe ne peut tre altre sans devoir tre
re-signe nouveau
! sn.exe est l"outil permettant de grer cela
! AssemblyKeyFile et AssemblyDelaySign sont les attributs
utiliser
38 2007, M. Riveill
Pourquoi signer un assembly ?
! Signer permet d"obtenir un nom fort :
" un nom unique
# Nul ne peut gnrer le mme nom d'assembly que le vtre, car un
assembly gnr avec une cl prive possde un nom diffrent de
celui d'un assembly gnr avec une autre cl prive.
" Les noms forts protgent l'enregistrement en ligne de la version d'un
assembly.
# Un nom fort peut garantir que nul ne peut produire une version
ultrieure de votre assembly.
# Les utilisateurs peuvent tre assurs qu'une version de l'assembly
qu'ils chargent provient du mme diteur qui a cr la version avec
laquelle l'application a t gnre.
" Les noms forts assurent un solide contrle d'intgrit.
# Le contenu de l'assembly n'a pas t modi depuis sa gnration.
! ATTENTION :
" les noms forts n"est pas une signature numrique, ni un certicat
39 2007, M. Riveill
Les cls
sn.exe -k publicprivate.snk
Public Key
(128 bytes + 32 bytes header)
Private Key
(436 bytes)
publicprivate.snk
sn.exe -p publicprivate.snk public.snk
Public Key
(128 bytes + 32 bytes header)
public.snk
40 2007, M. Riveill
Signature d"un assembly
PE/COFF
Header
Code
CLR Metadata
Assembly reference
MonApp.exe
MaLib
Public Key Token (8 bytes)
Public Key
(128 bytes + 32
bytes header)
Private Key
(436 bytes)
fichierdecles.snk
csc.exe /t:library MaLib.cs
PE/COFF
Header
Code
CLR Metadata
Public Key
(128 bytes +
32 bytes header)
Signature
MaLib.dll
csc.exe /t:exe /r:MaLib.dll MonApp.cs
41 2007, M. Riveill
Signature retarde d"un assembly
Public Key
(128 bytes + 32
bytes header)
public.snk
Public Key
(128 bytes + 32
bytes header)
Private Key
(436 bytes)
fichierdecles.snk
csc.exe /t:library MaLib.cs
PE/COFF
Header
Code
CLR Metadata
Public Key
(128 bytes +
32 bytes header)
Espace
libre
MaLib.dll
sn.exe -R MaLib.dll fichierdecles.snk
PE/COFF
Header
Code
CLR Metadata
Public Key
(128 bytes +
32 bytes header)
Signature
MaLib.dll
42 2007, M. Riveill
Signature retarde
! Retarder la signature permet de sparer les
processus de dveloppement de ceux de la
signature
! Pour suspendre la vrication de la signature sur
une assembly retarde:
43 2007, M. Riveill
Examinateur de code : Ildasm.exe
44 2007, M. Riveill
Dploiement d"un assembly
" GAC : #Global Assembly Cache"
" Cache qui contient tous les assemblies publis
" C:\WINDOWS\assembly
" Permet le partage des assemblies entre application
" Ou dployer
" Un rpertoire quelconque de la station
" Pas de gestion version
" Dans le GAC
" Partage de l"assembly entre toutes les applications
" Gestion de version
" Comment publier un assembly dans le GAC
" Pour tre publier un assembly doit avoir un nom fort
" gacutil /i nom_de_la_dll.dll
" /u pour dsinstaller
" /l pour lister le contenu du GAC
" Ou l"aise de l"explorateur Windows
45 2007, M. Riveill
Gestions de versions
! Plusieurs versions d"un mme assembly peuvent
tre excutes simultanment
" Excution #cte cte"(#side by side")
! Le multi-version ncessite
1. Donner un numro de version
" Utilisation d"un attribut : <Assembly: AssemblyVersion ("1.0.1.0")>
" Majeure.Mineure.Gnration.Rvision
2. Donner un #nom fort" (#strong name")
3. Publier l"assembly dans la gac (#Global Assembly Cache")
46 2007, M. Riveill
Assemblies et modules
Fichier de conguration
! Fichier XML permettant de spcier un certain
nombre de paramtres l"assembly
! Crer un chier extension .cong
47 2007, M. Riveill
Assemblies et modules
Redirection
! On peut rediriger un client vers une assembly
spcique mme si il avait t conu pour une autre
l"origine
! On ne peut dployer qu"une amorce pour son
application et tlcharger le reste des assemblies
dynamiquement
! Utiliser le chier de conguration XML
48 2007, M. Riveill
Assemblies et modules
Redirection: bindingRedirect
49 2007, M. Riveill
Assemblies et modules
Tlchargement: codeBase
50 2007, M. Riveill
Assemblies et modules
Conclusion
! L"assembly est le composant de la CLR
! Les types n"appartiennent qu" une et une seule
assembly
! Les assemblies peuvent tre publis dans un
rpertoire partag (le gac)
Demo
#Hello world"
Dsassembleur
Signature d"un assembly
Publication - Gestion de version
52 2007, M. Riveill
Types
! Un programme C# est une collection de type
" Classes, structures, numrations, interfaces, delegates, tableaux
! Chaque programmeur peut crer ses propres types
" types prdnis : int, byte, char, string, object,
! Les types sont :
" Des donnes membres : champs, constantes, tableaux, vnements
" Des fonctions membres : Mthodes, oprateurs, constructeurs, destructeurs,
proprits, indexeurs
" D"autres types : classes, structures, numrations, interfaces, delegates
! Les types peuvent tre instanci
" puis utiliss : appel de mthode, get et set de proprits, etc.
! Les types peuvent tre convertis, implicitement ou explicitement
! Les types sont organis en espace de noms, chiers et assemblies
" l"ensemble forme une hirarchie
! Il y a 2 catgories de types : valeur et rfrence
53 2007, M. Riveill
Types
Un seul systme de type
! Type valeur
" Contient des donnes
" Ne peut tre #null"
" Primitives int i; oat x;
" Enumrations enum State { Off, On }
" Structures struct Point {int x,y;}
! Type rfrence
" Contient des rfrences
vers des objets
" Peut tre #null"
" Racine object
" Chane string
" Classes class Foo: Bar, IFoo {...}
" Interfaces interface IFoo: IBar {...}
" Tableau string[ ] a = new string[10];
" Delegates delegate void Empty();
int i = 123;
string s = "Hello world";
123
i
s
"Hello world"
54 2007, M. Riveill
Types
Un seul systme de type
! Bnce des types valeurs
" Pas d"allocation dans le tas, moins de travail pour le GC
" Meilleure utilisation de la mmoire
" Moins de rfrence indirecte
" Un seul systme de type
# Pas de dichotomie type primitif/objet
Yes No Aliasing (in a scope)
May be null Always has value Nullability
Copy reference Copy data Assignment means
null 0 Default value
Heap Stack, member Allocated on
Memory location Actual value Variable holds
Reference (Class) Value (Struct)
55 2007, M. Riveill
Types
Conversions
! Conversion implicite
" Fonctionne automatiquement et sans possibilit d"chec
" Pas de perte de prcision/d"information
! Conversion explicite
" Ncessite un #cast"
" Peut tre refuse
" De l"information/prcision peut tre perdue
! Conversion implicite et explicite sont prcises par le programmeur
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
56 2007, M. Riveill
Types
Un systme de type uni
! Question : Comment peut-on traiter les valeur et les rfrences de la
mme manire ?
" int (type valeur) #$ objet (type rfrence) ?
! Rponse : Boxing!
" uniquement pour les types valeurs
" Dans version 1.5 de java (avec la gnricit)
! Boxing
" Copie un type valeur dans un type rfrence (objet)
" Chaque type valeur une correspondance cache dans un type rfrence
" Une copie d"un type rfrence est interprte comme une copie du type valeur
# Les types valeurs n"ont jamais de synonyme (d"alias)
" Conversion implicite
! Unboxing
" Copie un type rfrence dans un type valeur
" Ncessite une conversion explicite
# Peut chouer
57 2007, M. Riveill
Types
Un systme de type uni
! Bnce du boxing,
" Permet le polymorphisme pour tous les types (y compris les types valeurs)
" Les classes #collections" fonctionnent avec tous les types
" Elimine la ncessit de construire manuellement des classes d"encapsulation
" On trouve plein d"exemple d"utilisation dans le Framework .NET
! Dsavantage du boxing
" Performance
" L"utilisation de la gnricit a remplac la ncessit du boxing
# C++ templates C# intrinsics - Java generics
int i = 123;
object o = i;
int j = (int)o;
123 i
o
123 j
123
System.Int32
58 2007, M. Riveill
Types
Mthodes dfinies sur Object
! public bool Equals(object)
" Prend en charge la comparaison entre objet
! protected void Finalize()
" nettoyage avant de rcuprer un objet
! public int GetHashCode()
" Appel pour insrer lobjet dans une table de hachage
! public System.Type GetType()
" Donne le type de lobjet
! protected object MemberwiseClone()
" Construit un clone de lobjet
! public string ToString()
" Construit une chane de caractre qui dcrit une instance de la classe
59 2007, M. Riveill
! Le mot cl this est une variable prdnie accessible
dans chaque fonction membre non statique
" Utilis pour supprimer les ambiguts lors de l"accs aux donnes
ou aux fonctions membres
class Person {
string name;
public Person(string name) {
this.name = name;
}
public void Introduce(Person p) {
if (p != this)
Console.WriteLine(Hi, Im + name);
}
}
Types : classes et structures
this
60 2007, M. Riveill
! Le mot cl base est utilis pour accder aux membres de
classes masqus par un nom similaire de la classe
courante
! La surcharge d"une mthode doit tre explicite (override)
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;
}
}
Types : classes et structures
base
61 2007, M. Riveill
! Une constante est une donne membre qui est
value la compilation
" Elle est implicitement statique
" i.e. Math.PI
public class MyClass {
public const string version = 1.0.0;
public const string s1 = abc + def;
public const int i3 = 1 + 2;
public const double PI_I3 = i3 * Math.PI;
//ERROR
public const double s = Math.Sin(Math.PI);
...
}
Classes et Structures
Constantes
62 2007, M. Riveill
Classes et Structures
Champs non modiable (#read-only")
! Similaire une constante, mais initialis l"excution
" Une fois initiatis, il ne plus tre modi
! Diffrents une constante
" Initialis l"excution (vs. la compilation)
#Il n"est pas ncessaire de re-compiler les client de la
classe/struct qui le dni
" Il peut tre statique (et partag par les diffrentes instances) ou propre
chaque instance
public class MyClass {
public static readonly double d1 = Math.Sin(Math.PI);
public readonly string s1;
public MyClass(string s) { s1 = s; }
}
63 2007, M. Riveill
! Une proprit est un champ virtuel
! Ressemble un champ, mais est implment par du
code
! Peut tre read-only, write-only ou read/write
public class Button: Control {
private string caption;
public string Caption {
get { return caption; }
set { caption = value;
Repaint(); }
}
}
Button b = new Button();
b.Caption = "OK";
String s = b.Caption;
Classes et Structures
Proprits
64 2007, M. Riveill
Classes et Structures
Indexeurs
! Un indexeur permet une instance d"tre un tableau
virtuel
! Peut tre surcharg (i.e. index par int et par string)
! Peut tre read-only, write-only ou read/write
public class ListBox: Control {
private string[] items;
public string this[int index] {
get { return items[index]; }
set { items[index] = value;
Repaint(); }
}
}
ListBox listBox = new ListBox();
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
65 2007, M. Riveill
! Un dlgu (delegate) est un type rfrence qui dni
la signature d"une mthode
! Quand il est instanci, un dlgu peut faire rfrence
une ou plusieurs mthodes
" De manire intuitive :
#delegate = un pointeur sur une fonction dans le modle objet
! Sert de base pour la gestion des vnements
Types
Delegates
66 2007, M. Riveill
Delegates
! Un #delegate" est une rfrence sur une signature de mthode
! Une instance de #delegate" dni une ou plusieurs mthodes
" Les mthodes peuvent tre statique ou non
" Les mthodes peuvent retourner une valeur
! Permet le polymorphisme sur les fonctions/mthodes
! La base pour la programmation par vnement
delegate double Del(double x); // Declare
static void DemoDelegates() {
Del delInst = new Del(Math.Sin); // Instantiate
double x = delInst(1.0); // Invoke
}
67 2007, M. Riveill
Delegates multicast
! Un delegate peut appeler plusieurs mthodes
" Les delegates non multicast peuvent contenir des fonctions
" Les delegates multicast ne contiennent pas de fonction
# le paramtre de retour est void
! Chaque delegate possde sa propre liste d"appel
" Les mthodes sont appeles squentiellement, dans leur ordre
d"ajout
! Oprateurs += et -=
" Utiliss pour insrer supprimer une mthode la liste du delegate
" Fonctionnent correctement avec les threads
68 2007, M. Riveill
Delegates
Multicast Delegates
delegate void SomeEvent(int x, int y);
static void Foo1(int x, int y) {
Console.WriteLine("Foo1");
}
static void Foo2(int x, int y) {
Console.WriteLine("Foo2");
}
public static void Main() {
SomeEvent func = new SomeEvent(Foo1);
func += new SomeEvent(Foo2);
func(1,2); // Foo1
// et Foo2 sont appels
func -= new SomeEvent(Foo1);
func(2,3); // Seul Foo2 est appel
}
d
e
l
e
g
a
t
e
a
t
t
e
n
t
e
d
e
l
e
g
a
t
e
a
t
t
e
n
t
e
69 2007, M. Riveill
Delegate
Appel asynchrone
int resultat;
IAsyncResult asyncResult;
// cration du delegate
monDelegate = new
// appel du delegate
asyncResult = monDelegate.BeginInvoke(null, null);
// suite de lactivit
// attente de la fin dexcution du delegate
resultat = monDelegate.EndInvoke (asyncResult);
Console.WriteLine ("Valeur de retour du delegate {0}", resultat);
d
e
l
e
g
a
t
e
a
t
t
e
n
t
e
70 2007, M. Riveill
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);
}
// cration du callback
AsyncCallback asyncCallback = new AsyncCallback (callBack);
// cration du delegate
monDelegate = new
// appel du delegate
IAsyncResult asyncResult = monDelegate.BeginInvoke(asyncCallback,
monDelegate);
// suite de lactivit
d
e
l
e
g
a
t
e
c
a
l
l
B
a
c
k
71 2007, M. Riveill
Thread
Dclaration
public class ActEnPar {
public ActEnPar () {
thread = new Thread (new
ThreadStart (Activite));
}
public void DemarrageFork () {
thread.Start();
}
public void AttenteJoin () {
thread.Join();
}
public void Activite() {
// code de lactivit
}
}
! En C#, utilisation d"un delegate (qui ne prend
aucun paramtre et rend aucune valeur)
public class ActEnPar implements
Runnable {
public ActEnPar () {
thread = new Thread(this);
}
public void demarrageFork () {
thread.start();
}
public void attenteJoin () {
thread.join();
}
public void run() {
// code de lactivit
}
}
72 2007, M. Riveill
Thread
Utilisation
class ClasseUtilisatrice {
public static void Main(string[]
args) {
ActEnPar act = new ActEnPar ();
act.DemarrageFork ();
// Dautres activit peuvent
tre dmarres ici
act.AttenteJoin ();
}
}
public class ClasseUtilisatrice {
public static void main(String[]
args) {
ActEnPar act = new ActEnPar ();
act.demarrageFork ();
// Dautres activit peuvent
tre dmarres ici
act.attenteJoin ();
}
}
73 2007, M. Riveill
Evnements
! La programmation par vnement permet un objet
de prvenir un ensemble d"objets en attente de la
production d"un vnement
" Modle #publish-subscribe"
" Bas sur un mcanisme de #call-back"
" Le programmeur se concentre sur les ractions excuter et non
pas sur le lien vnement-raction
" Code plus lisible
74 2007, M. Riveill
Evnements
! Les vnement sont trs utiliss lors de la construction d"IHM
" L"utilisateur fait une action (click sur un bouton, dplace la souris, change
une valeur, etc.) et le programme ragit
" Il existe de nombreuses autres utilisation, i.e.
# vnements temporels
# Gestion des excutions asynchrones (prvenir qu"un email est arriv,
qu"une session Web a dmarr)
" Modle de programmation frquent
# WinForm
# Pages ASP
# Les environnements de dveloppement proposent de ne programmer
que la raction des vnements connus
75 2007, M. Riveill
Evnement
! C# supporte les vnements
" L"metteur de l"vnement
# dni le dlgu
# il sera excut chaque occurrence de l"vnement
" Les clients de l"vnement
# enregistrent le traitement associer l"vnement
$ Appel de += (ou de -=) sur les dlgus
# ne peuvent pas crer les vnements
" Utilisation de dlgus multicast
# plusieurs objets peuvent enregistrer une raction pour le mme
vnement
76 2007, M. Riveill
public class Button {
// Dclarer le delegate
public delegate void SampleEventHandler (object sender,
EventArgs e);
// Dclarer lvnement
public event SampleEventHandler click;
// encapsuler lvnement dans une mthode virtuelle
// afin que les classes drives puissent lever
// lvnement et demander lxcution de OnClick
protected virtual void OnClick(EventArgs e) {
if (click != null) {
// excuter les ractions enregistres
click(this, e);
}
}
}
Evnements
Exemple cot composant (metteur)
77 2007, M. Riveill
Evnements
Exemple : cot utilisateur de l"vnement
public class MyForm: Form {
// variable de la classe prcdente
Button okButton;
// Dfinition de la raction
static void OkClicked (object sender,
EventArgs e) {
ShowMessage("You pressed the OK button");
}
public MyForm() {
// cration du button si ncessaire
okButton = new Button(...);
okButton.Caption = "OK";
// enregistrement de la raction
okButton.Click +=
new EventHandler(OkClicked);
}
}
78 2007, M. Riveill
Evnement un autre exemple
! Dnir ventuellement un vnement
public class EventFeuArgs: EventArgs {
public string piece; // le lieu de lincendie
public int force; // la puissance du feu
// constructeur
public EventFeuArgs(string piece, int force) {
this.piece = piece;
this.force = force;
}
}
79 2007, M. Riveill
Evnement - exemple
! Dnir la classe qui gnre l"vnement et appelle le dlgu
associ (contiendra l"ensemble des ractions)
public class Alarme {
! Dnir la signature de la fonction associe l"vnement
comme un dlgu
public delegate void EventFeuHandler(object sender, EventFeuArgs feu);
! Dnir la variable qui contiendra les dlgus
public EventFeuHandler EventFeu;
! Dnir la logique d"mission par appel du delegu
public void ActivationAlarme(string piece, int force) {
EventFeuArgs feuArgs = new EventFeuArgs(piece, force);
EventFeu(this, feuArgs);
}
}
80 2007, M. Riveill
Evnement - exemple
! Dnir la classe qui propose un traitement l"vnement
class Secours {
! Dnir le traitement associer l"vnement
void EteindreFeu(object sender, EventFeuArgs feu) {
Console.WriteLine(Feu dans piece {0}.", feu.piece);
if (feu.force < 5)
Console.WriteLine(Utiliser un instincteur");
else
Console.WriteLine(Appeler les pompiers);
}
! S"abonner l"vnement
// constructeur
public Secours(Alarme alarme) {
alarme.EventFeu += new Alarme.EventFeuHandler(EteindreFeu);
}
}
81 2007, M. Riveill
Evnement exemple
! Utilisation
public class Test {
public static void Main () {
// Crer une instance de la classe qui lve les alarmes
Alarme monAlarme = new Alarme();
// Crer une instance de la classe Secours
Secours incident = new Secours(monAlarme);
// Utiliser la classe pour mettre quelque vnements
monAlarme.ActivationAlarme("Cuisine", 3);
// Crer une autre instance de la classe Secours
AutreSecours bis = new AutreSecours(nouvelleAlarme);
}
}
Demo
Delegates : multicast et appel asynchrone
Evnements
83 2007, M. Riveill
Les attributs
Etendre les informations des types
! Les attributs permettent:
" d"associer des informations utilisateurs aux types (version,
URL de la documentation, COM ProgID, )
" de contrler l"excution (serialization, mapping XML, remoting,
activation transaction, )
! La CLR propose un certain nombre d"attributs en
standard
! Dcoration du code
" Assembly, module, type, membre, paramtres et valeur de retour
84 2007, M. Riveill
Les attributs
! Les attributs sont
" Intgrs au code sans modication de la syntaxe d"origine
" Extensibles
# Ajout d"informations utilisateurs
" Sr
# le type des arguments est vri lors de la compilation
" Pris en charge par le framework .NET
" Commun tous les langages de programmation
# Sauvegard dans l"assembly metadata
" Utiliss dans tous le framework .Net
# XML, services Web, scurit, serialisation, modle de composant,
introperabilit avec COM, conguration du code
! Les attributs peuvent tre
" Examin l"excution en utilisant la rexivit
85 2007, M. Riveill
La rexion / introspection
! Le CLR supporte la rexivit
" Permet d"inspecter dynamiquement le contenu d"un assembly
" De crer des instances de types
" Principales mthodes
# Assembly.GetTypes
$ Renvoie un tableau de #System.Type" contenant tous les types dnis
dans l'assemblage
# Assembly.GetMembers
$ Renvoie un tableau de #System.Reection.MemberInfo" contenant les
signatures de tous les membres de chaque type de l'assemblage
# Activator.CreateInstance
$ Cre dynamiquement une instance du type spci
# Type.InvokeMember
$ Tente d'invoquer le membre spci sur le type
86 2007, M. Riveill
// sur les types
Assembly monAssembly = Assembly.LoadFrom(aFiles);
Foreach (Type type in monAssembly.GetTypes()) {
Console.WriteLine(Type prsent dans lasssembly : + type.Name);
}
// sur les membres
aType anInstance = new aType ();
// Employe employe = new Employe();
Foreach (MemberInfo memberInfo in anInstance.GetTypes().GetMembers()) {
Console.WriteLine({0}, memberInfo.Name);
}
Introspection
Exemple
87 2007, M. Riveill
Attributs
Etendre les informations des types
! Syntaxe:
Attribut sur
une assembly
Attribut sur
une classe
Attribut sur
un membre
Attribut sur
une mthode
Attribut sur
une proprit
88 2007, M. Riveill
Attributs
Exemple : Srialisation
! La srialisation (binaire ou XML) des types est
automatiquement prise en charge par la CLR
! On peut intervenir sur le comportement en
positionnant un certain nombre d"attributs
89 2007, M. Riveill
Attributs
Exemple : Srialisation
90 2007, M. Riveill
Attributs
Exemple: Srialisation
91 2007, M. Riveill
Attributs
Custom attributes
! On peut tendre le .NET Framework avec ses propres attributs
! Exemple :
" Construire un attribut permettant d"indiquer l"auteur d"une classe et sa
version
[MonAttribut ("Moi", 3]
public class AccesAuxDonnees {
// code de la classe
}
92 2007, M. Riveill
La reection 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;
}
}
93 2007, M. Riveill
La reection et les attributs
Custom attributes
static void Main(string[] args) {
AccesAuxDonnees anInstance ;
MonAttributAttribute monAttribut =
(MonAttributAttribute) Attribute.GetCustomAttribute
(type, anInstance.GetTypes(), false);
Console.WriteLine ("Code cre par : " + customAttribute.Owner);
Console.WriteLine ("Version de code : " + customAttribute.Version);
}
94 2007, M. Riveill
La reection et les attributs
Conclusion
! Les informations sur les types sont facilement
accessibles
! Permettent d"effectuer des oprations en runtime
! Permettent d"effectuer des oprations au moment
du dveloppement
! Extensibles grce aux Custom Attributes
Demo
Attributs et rexivit
Troisime partie
Les applications Web et les services techniques
L"accs aux donnes (ADO.NET)
Les services Web (ASMX)
Les pages dynamiques (ASP.NET)
La scurit
Les transaction
97 2007, M. Riveill
L"accs aux donnes :
une architecture deux niveaux
! Mode dconnect :
" Le Dataset est le cache des
donnes de la base
! Mode connect :
" Accs physique la base lors
de toutes consultations /
modifcations
98 2007, M. Riveill
Mode connect
! Extraction des donnes en mode connect l'aide de
DataReader
" Extraction d"un ux de donnes en lecture seule
" Les rsultats sont retourns pendant que la requte s'excute
" Ils sont stocks dans la mmoire tampon de rseau sur le client
" Demande de leurs disponibilits par la mthode Read de
DataReader.
" Le mode connect se rvle tre un bon choix lors de l'extraction
de grandes quantits de donnes
# Extraction des donnes ds qu'elles sont disponibles
$ On n"attend pas que tous les rsultats de la requte soient retourns,
# Pas de mises en cache dans la mmoire.
99 2007, M. Riveill
Mode dconnect
! Les donnes sont caches dans les DataSets
" Limite les allers retour vers le serveur
# Lecture / Ecriture sur le DataSet qui est un cache des donnes de la base
" Notion de virtual data store
! Un DataSet est structur comme la base de donnes
" Contient une ou plusieurs tables
" DataAdapters assurent le transfert (bi-directionnel) des donnes entre DataSet et la
base de donnes
# Ils chargent les donnes depuis la base de donnes dans le DataSet
# Ils rpercutent les modications du DataSet vers la base de donnes sur
demande
DataSet DataSet
DataAdapters DataAdapters Base de donnes Base de donnes
100 2007, M. Riveill
Architecture 3 parties
Demo
Accs aux donnes
Mode connect (DataReader) et non connect (DataSet)
102 2007, M. Riveill
Les services Web
La base de la vision .NET
! Un service Web est une unit logique applicative accessible en
utilisant les protocoles standard d"Internet
! Caractristiques:
" Rutilisable
" Indpendamment de
# la plate-forme (UNIX, Windows, )
# l"implmentation (VB, C#, Java, )
# l"architecture sous-jacente (.NET, J2EE, )
! Ce sont des librairies fournissant des donnes et des services
d"autres applications
! Combinent les meilleurs aspects du dveloppement base de
composant et du Web
103 2007, M. Riveill
Web Web
Site Site
Service Service
Web Web
Les Services Web
Au-del de la navigation
Service Service
Web Web
XML XML
H
T
M
L
H
T
M
L
Client Client
X
M
L
X
M
L
Client Client
XML XML
Service Service
Web Web
X
M
L
X
M
L
Service Service
Web Web
XML XML
X
M
L
X
M
L
104 2007, M. Riveill
Web Services Providers

Accs Universel aux services
Web
Server

Application
Server

Back Ofce
And
Enterprise
Systems
EAI
&
Connectors
Business
Object
Business
Object
Business
Object
Web
Service
Web
Service
105 2007, M. Riveill
Annuaire
UDDI
Client
XML
J J ai compris comment invoquer ai compris comment invoquer
ton service et je t ton service et je t envoie un document envoie un document
XML reprsentant ma requte XML reprsentant ma requte
Serveur
J J ai trouv! Voici le serveur ai trouv! Voici le serveur
hbergeant ce service web hbergeant ce service web
Quel est le format d Quel est le format d appel du appel du
service que tu proposes? service que tu proposes?
Contrat
SOAP
Voici mon contrat (WSDL) Voici mon contrat (WSDL)
XML
XML
J J ai excut ta requte et je te retourne le rsultat ai excut ta requte et je te retourne le rsultat
J
e
J
e

r
e
c
h
e
r
c
h
e
r
e
c
h
e
r
c
h
e
u
n

s
e
r
v
i
c
e

W
E
B

u
n

s
e
r
v
i
c
e

W
E
B

106 2007, M. Riveill
Dvelopper un service Web
! Dans deux chiers (code behind)
! Dans un seul chier
<%@ WebService Language="c#" Codebehind="MyWebService.cs"
Class="FirstWebService.MathService" %>
<%@ WebService Language=C# Class=MathService %>
using System.Web.Services;
public class MathService : WebServices {
[WebMethod]
public int Add(int num1, int num2) {
return num1 + num2;
}
}
107 2007, M. Riveill
Utiliser un Service Web
Dveloppeur du
service Web
Dveloppeur du
client
Service Web
Service App .asmx
Client
Service Application
Proxy
.cs
Client
.cs
crer le proxy*
en utilisant
WSDL.exe
* : un stub (Corba) est un proxy dans le monde MS
Serveur
http-IIS
Client
Service Application
Stub
.java
Client
.java
crer le stub*
en utilisant
WSDL2Java
108 2007, M. Riveill
Gnration du proxy / stub
! C#
! Java
java org.apache.axis.wsdl.WSDL2Java 'URL_du_service_web?WSDL '
wsdl URL_du_service_web?WSDL
Demo
Service Web
110 2007, M. Riveill
Les pages dynamiques
! ASP.Net
" Fait partie de .NET Framework
" Construit, dploie et excute des applications et des services Web
" Les applications Web Visual Studio .NET prennent directement en
charge ASP.NET
Common Language Runtime Common Language Runtime
Infrastructure de base Infrastructure de base
ADO.NET : donnes et XML ADO.NET : donnes et XML
Services Web Services Web Interface utilisateur Interface utilisateur
VB VB C++ C++ C# C#
ASP.NET ASP.NET
Perl Perl Python Python ... ...
111 2007, M. Riveill
Architecture 3 parties
vocabulaire
Prsentation Composants mtiers Persistance
SQL
Server
MSDE
ADO.Net
ASP.Net
Web Form
.aspx
Assembly .Net
Services COM+
Transactions
Scurit
Activation-
pooling
Multi-service
Web services
.asmx
.cs
IIS
112 2007, M. Riveill
Web Forms
Infrastructure de page ASP.NET
! Objectif : dvelopper une page Web comme on
dveloppe un cran client riche.
" Unication du modle de programmation
# Modle d"excution vnementiel bas sur des contrles
# Modle vnementiel et DOM (modle de document) projet
sur le serveur
" Gnration dynamique du code HTML correspondant au navigateur
# System.Web.UI.WebControls
! Excution sur le serveur IIS paralllement aux
applications ASP existantes
" Excut via CLR en tant que code natif
! Visual Basic, C#, JScript
113 2007, M. Riveill
Compilation la vole
Rponse Rponse
Rponse Rponse
Classe Classe
de la de la
page page
Instanciation, Instanciation,
traitement et rendu traitement et rendu
Fichier
classe
gnr
de la page
Gnrer Gnrer
Instancier Instancier
Parser Parser
Moteur Moteur
ASPX ASPX
ASPX
File
Requte Requte
Requte Requte
Fichier Fichier
classe classe
Code- Code-
behind behind
Fichier
ASPX
114 2007, M. Riveill
<balises>
Form1. Form1.aspx aspx
code code
<balises>
Form1.aspx Form1.aspx
code code
Form1.vb Form1.vb
fichier unique fichier unique fichiers spars fichiers spars
Web Forms
! Un formulaire Web combine des balises dclaratives
(HTML, directives ASP, contrles serveur et texte
statique) avec du code
! Toutefois, le code et les balises sont bien spars
115 2007, M. Riveill
Web Forms
Cycle de vie d"une page
Page_Load Page_Load
Page_Unload Page_Unload
Textbox1_Changed Textbox1_Changed
Button1_Click Button1_Click
Evnements de contrle Evnements de contrle
1. Evnements de 1. Evnements de
modification modification
2. Evnements 2. Evnements
d d action action
Page charge et initialise Page charge et initialise
Page libre Page libre
116 2007, M. Riveill
Web Forms
Contrles serveur
! 45 contrles intgrs
" Gnre du HTML 3.2
" On retrouve les contrles usuels
# textbox, checkbox, radio, button
" Dclenchent des vnements vers le serveur
# Textbox1_ Changed, Button1_Click
" Dclanchent des vnements lis au cycle de vie de la page
# Page_Load, Page_Unload
117 2007, M. Riveill
! Un tat de session est associ chaque processus ASP.NET
" InProc : variables de session conventionnelles. Stockes en mmoire sur le serveur
Web
" StateServer : les sessions sont stockes sur un serveur externe, en mmoire
" SqlServer : les sessions sont stockes dans une base de donnes SQL
# Amliore grandement la abilit
# L"tat de session peut survivre un crash ou un redmarrage
! Possibilit de crer des variables globales lies l"application
" Commune toutes les instances de l"application (exemple verrouillage d"une section
critique)
! Possibilit de crer des variables propres chaque utilisateur
" Disponibles pour toutes les pages du site
Application.Lock
Application("CompteurGlobal") = NouvelleValeur
Application.Unlock
Session("UserID") = 5
UserID = Session("UserID")
Applications ASP.NET
Variables d"excution
118 2007, M. Riveill
Applications ASP.NET Applications ASP.NET
Conguration de l Conguration de l" "tat de session tat de session
! Mode
" InProc : variables de session conventionnelles. Stockes en mmoire sur
le serveur Web
" StateServer : les sessions sont stockes sur un serveur externe, en
mmoire
" SqlServer : les sessions sont stockes dans une base de donnes SQL
# Amliore grandement la abilit
$ L"tat de session peut survivre un crash ou un redmarrage
! Permet le dploiement de fermes Web
" Les tats de session peuvent tre partages travers une ferme de
serveurs Web ASP .NET
" Les applications ne sont plus relies une machine particulire
! Cookieless
" Dtermine si des sessions sans cookies doivent tre utilises
" Les valeurs possibles sont true et false
119 2007, M. Riveill
! Possibilit d"utiliser les cookies ou non
! Compatible avec l"utilisation de fermes Web
! Le comportement et la conguration est dcrite
" Dans le chier Web.Cong
<sessionState
mode="sqlserver"
cookieless="false"
timeout="20"
sqlConnectionString="data source=127.0.0.1;
user id=sa;password=""
stateConnectionString="tcpip=127.0.0.1:42424"
/>
Applications ASP.NET Applications ASP.NET
Conguration de l Conguration de l" "tat de session tat de session
Demo
Pages ASP.Net
Scurit
122 2007, M. Riveill
Modle de scurit - .NET
Deux types de scurit
! Scurit d"accs au code
" Bas sur les politiques de
scurit et sur des
vidences.
! Scurit base sur les
rles
" Bas sur l"identit de
l"utilisateur. (Compte
Windows ou autre)
123 2007, M. Riveill
Scurit d"accs au code
1
re
tape : Obtention des preuves
! Chaque fois qu"un assembly est charg dynamiquement
" l"environnement doit produire un certicat
" Ce certicat permet d"identier la politique de scurit qui sera
applique
! Voici quelques formes de certicat
" A chaque certicat correspond une classe du framework qui le dcrit
" System.Security.Policy.Site : le site d"o provient le composant
" System.Security.Policy.Url : une URL qui identie la ressource
" System.Security.Policy.Zone : mme concept que les zones d"Internet
Explorer.
" System.Security.Policy.Publisher : certicat dpos de l"assembly
" System.Security.Policy.StrongName : Strong Name: gnr partir de
sn.exe (Composants .Net)
" System.Security.Policy.Hash : la valeur de hashage d"un assembly
(gnr par SHA1)
" System.Policy.ApplicationDirectory : le rpertoire qui contient le code
Chargement de
l"assemblage
Assemblage
Obtention
des
certificats
Excution
124 2007, M. Riveill
Scurit d"accs au code
2
me
tape : Application des politiques de scurit
! 3 groupes de permissions
" Permissions d"accs aux ressources
# Si l"objet est une ressource de tel type alors je peux faire cela
$ System.Security.Permission.FileIOPermission permet le contrle des accs aux
chiers et rpertoires
" Permissions associes aux certicats
# Si l"objet a ce certicat alors je peux faire cela
" Meta permission
# Permissions accordes au gestionnaire de scurit
! Application des politiques de scurit
" Obtenir un ensemble de permissions en fonction des certicats
" 4 politiques de scurit
# Entreprise
# Machine
$ Congur par l"administrateur de la machine
# Utilisateur
$ Congur par l"utilisateur
$ S"applique au code gr par les processus de l"utilisateur
# Domaine d"application
$ Congur par l"application
" les permissions accordes un assembly sont l"intersection des permissions
accordes pour chaque politique
! Se congure dans : Conguration Microsoft .NET Framework
" Dans le rpertoire : Outils d"administration
Chargement de
l"assemblage
Excution
Assemblage
Certicats
Obtention
des
certificats
Application
des
politiques de
scurit
125 2007, M. Riveill
! Si les droits sont sufsants, alors
" L"objet est coupl
" Le code est excut
! Il est possible temporairement de retreindre des droit
" Exemple : garantir que du code tiers, dont on a moyennement conance
accde des zones sensibles
" Le composant B accde une ressource O
" B a les droits pour accder O
" Le composant A appelle le composant B
" A n"a pas les droits pour accder O
" Est-ce que A peut nanmoins y accder via B ?
Scurit d"accs au code
3
me
tape : restriction des permissions l"excution
Chargement de
l"assemblage
Assemblage
Certicats
Obtention
des
certificats
Application
des
politiques de
scurit
Restriction
des
permissions
accordes
lassemblage
Excution
Permission
accordes
126 2007, M. Riveill
Scurit d"accs au code
Exemple 1
! Exemple de code pour B
PermissionSet PS = new PermissionSet(PermissionState.None);
// la ressource est le rpertoire C:\Windows
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\Windows"));
// la ressource est la base de registre
PS.AddPermission (new RegistryPermission(RegistryPermissionAccess.AllAccess,""));
// proposition 1 : jempche tout le monde accder la ressource
PS.Deny(); // supprime les permissions contenues dans PS
// ressource inaccessible y compris quelquun qui avait les droits
CodeAccessPermission.RevertDeny(); // rtabli les permissions
! Peut aussi se programmer l"aide d"un attribut
[FileIOPermission(SecurityAction.Deny, @"C:\Windows"]
127 2007, M. Riveill
Scurit d"accs au code
Exemple 1
! Exemple de code pour B
PermissionSet PS = new PermissionSet(PermissionState.None);
// la ressource est le rpertoire C:\Windows
PS.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, @"C:\Windows"));
// la ressource est la base de registre
PS.AddPermission (new RegistryPermission(RegistryPermissionAccess.AllAccess,""));
// proposition 2 : je me porte garant pour laccs la ressource
PS.Assert(); // supprime les permissions contenues dans PS
// ressource accessible pour tous
// (sous rserve que celui qui fasse la demande possde bien les droits)
CodeAccessPermission.RevertDeny(); // rtabli les permissions
! Peut aussi se programmer l"aide d"un attribut
[FileIOPermission(SecurityAction.Assert, @"C:\Windows"]
128 2007, M. Riveill
Scurit d"accs au code
Exemple 2
! Contrler l"identit de l"appelant en se basant sur un certicat
" Certicat utilis : nom fort (strong name)
" Dans composant partag
# On indique que seul celui qui possde la cl prive associe la cl
publique donne peut appeler ce composant
" Dans composant A qui connat la cl prive
# appel du composant partag (en utilisant la cl prive ")
" Dans composant B qui ne connat pas la cl prive
# appel du composant partag (sans la cl prive !)
composant A
composant B
composant
partag
cl
publique
cl
prive
129 2007, M. Riveill
Scurit d"accs au code
Code de l"exemple
// code du composant partag
[StrongNameIdentityPermission(SecurityAction.Demand,
PublicKey = "la cl publique")]
public class SharedComponent {
public static string GetInfo() {
return "La composant 'priv' a t appel.";
}
}
composant A
composant B
composant
partag
cl
publique
cl
prive
130 2007, M. Riveill
Scurit d"accs au code
Code de l"exemple
// 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);
}
}
}
composant A
composant B
composant
partag
cl
publique
cl
prive
131 2007, M. Riveill
Scurit d"accs au code
Conguration
132 2007, M. Riveill
Scurit base sur les rles
Role-based security
! Comparable au mcanisme COM+
! Utilisateurs et rles et peuvent tre :
" Des comptes/groupes Windows
" Spciques l"application
! Utilise l"objet #PrincipalPermission"
" Dcrit un utilisateur et un rle
" Associ au thread courant
133 2007, M. Riveill
Scurit base sur les rles
Exemple
public class aClass {
public void AdminMethod () {
if (Thread.CurrentPrincipal.IsInRole
(@"BUILTIN\Administrateurs")) {
// corps de la mthode
// ici le principal est un administrateur
}
}
public void GuestMethod () {
if (Thread.CurrentPrincipal.IsInRole
(@"BUILTIN\Utilisateur")) {
// corps de la mthode
// ici le principal est un utilisateur
}
}
}
1) Utilisation des rles Windows
134 2007, M. Riveill
Scurit base sur les rles
Exemple
public class aClass {
[PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Administrateurs")]
public void AdminMethod () {
// corps de la mthode
}
[PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Utilisateurs")]
public void GuestMethod () {
// corps de la mthode
}
}
public class IdentityCheck {
public static void Main() {
aClass o = new aClass;
try {
o.AdminMethod();
} catch(Exception e) {
if (e is SecurityException & ((SecurityException)e).PermissionType
== typeof(PrincipalPermission)) {
// On navait pas de droit dexcuter la mthode
}

1bis) Utilisation des rles Windows


135 2007, M. Riveill
Scurit base sur les rles
Exemple
public class aClass {
public void AdminMethod () {
SecurityCallContext sec = SecurityCallContext.CurrentCall;
if (sec.IsCallerInRole("Agent Administrateur")) {
// corps de la mthode
// Seul les principaux avec le rle Agent Administrateur
// peuvent excuter cette mthode
} else {
throw new Exception ("Vous navez pas le droit");
}
}
2) Utilisation des rles utilisateur (liste d"accs)
Bas sur la classe ServicedComponent
136 2007, M. Riveill
Scurit base sur les rles
Exemple : classe cliente
! Quelque soit la manire de dcrire le rle :
public static void Main() {
aClass o = new aClass;
try {
o.AdminMethod();
} catch(Exception e) {
if (e is SecurityException
& ((SecurityException)e).PermissionType
== typeof(PrincipalPermission)) {
// On navait pas de droit dexcuter la mthode
}

}
137 2007, M. Riveill
Scurit bas sur les rles
Conguration des rles
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 mthode
// Seul les principaux avec le rle
// adquat peuvent excuter cette mthode
} else {
throw new Exception ("Vous navez pas le droit");
}
}
138 2007, M. Riveill
La classe ServicedComponent
! Services techniques supports par Windows XP
1. Liste d"accs et rles
2. Transactions
" Autres services : Queue de messages,
! Classe ServicedComposent fait le lien entre .Net et Windows
.Net Framework
COM+ Services
.Net Client
Niveau
Implmentation
Niveau
Service
Contexte
pour
l"objet .Net A
Contexte pour
l"objet .Net B
Objet .Net A
Objet .Net B
139 2007, M. Riveill
Scurit bas sur les rles
mode opratoire
! Pour crer une classe .Net connue par COM+
1. Faire driver la classe ServicedComponent
2. Donner un nom unique l"assembly
# sn -k TestApp.snk pour produire la paire de cl
# Ajouter les cls l"assembly
[assembly: AssemblyKeyFileAttribute("TestApp.snk")]
3. Enregistrer l"assembly qui contient la classe dans le catalogue COM+
# Si le client de la classe est #manag" (i.e. pris en charge par le
common language runtime), l"enregistrement est effectu par le CLR
# sinon anticiper l"usage de la classe par du code non #manag", en
utilisant le service .Net d"enregistrement (Regsvcs.exe)
4. Congurer le service technique concern dans COM+
140 2007, M. Riveill
Modle d"excution .Net
PEVerify PEVerify
DEPLOYMENT DEPLOYMENT
GAC, GAC,
app. directory app. directory
public static void Main(String[] args )
{ String usr; FileStream f; StreamWriter w;
try {
usr=Environment.GetEnvironmentVariable("USERNAME");
f=new FileStream(C:\\test.txt",FileMode.Create);
w=new StreamWriter(f);
w.WriteLine(usr) ;
w.Close();
} catch (Exception e){
Console.WriteLine("Exception:"+e.ToString( ));
}
}
Compiler Compiler
DEVELOPMENT DEVELOPMENT
public static void Main(String[] args )
{ String usr; FileStream f; StreamWriter w;
try {
usr=Environment.GetEnvironmentVariable("USERNAME");
f=new FileStream(C:\\test.txt",FileMode.Create);
w=new StreamWriter(f);
w.WriteLine(usr) ;
w.Close();
} catch (Exception e){
Console.WriteLine("Exception:"+e.ToString( ));
}
}
Source code Source code
Assembly Assembly
PE header + MSIL + PE header + MSIL +
Metadata + EH Table Metadata + EH Table
EXECUTION EXECUTION
Assembly info Assembly info
Module Module
+ Class list + Class list
Policy Policy
Manager Manager
Host Host
Policy
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<mscorlib>
<security>
<policy>
<PolicyLevel version="1">
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="Nothing"
Name="All_Code"
Description="Code group
grants no permissio
ns and forms the root of the code group tree.">
<IMembershipCondition clas
s="AllMembershipCondition"
version="1"/>
<CodeGroup class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Class Class
Loader Loader
Granted Granted
permissions permissions
Vtable Vtable + +
Class info Class info
JIT + JIT +
verification verification
Native code Native code
+ GC table + GC table
CLR Services CLR Services
% %GC GC
% %Exception Exception
% %Class init Class init
% %Security Security
(
a
s
s
e
m
b
l
y
)
(
a
s
s
e
m
b
l
y
)
(class) (class)
(method) (method)
Assembly Assembly
Loader Loader
Evidence Evidence
Permission request Permission request
Demo
Scurit
Transactions
143 2007, M. Riveill
Transactions
! Elles sont prises en charge par COM+
" MTS (Microsoft Transaction Server)
! Principaux composants
" processus MTS
# installation, cration, cycle de vie, contexte d "excution, scurit, activation
juste temps (just-in-time)
" MS Distributed Transaction Coordinator (DTC)
# service de gestion de transactions rparties orient objet
# gre aussi les transactions lies aux serveurs de bases de donnes
144 2007, M. Riveill
Transactions
! Toute instance d"une classe .Net peut participer
automatiquement une transaction
" Il faut la prparer
" Chaque ressource accde par une instance est #enrolle" dans la
transaction
" Par exemple
# Un objet utilise ADO.Net pour dposer une somme dans une
base de donne (gestion de compte bancaire),
# Le gestionnaire de ressource dtermine les diffrents objets
qui font parti de la transaction,
# Et inclue
$ Les objets .Net
$ La base de donnes
# Dans la transaction
145 2007, M. Riveill
Transactions
! Pour crer une classe #transactionnelle"
1. Positionner l"attribut #TransactionAttribute" votre classe
2. Faite la driver de la classe ServicedComponent
3. Donner un nom unique l"assembly
# sn -k TestApp.snk pour produire la paire de cl
# Ajouter les cls l"assembly
[Visual Basic] <assembly: AssemblyKeyFileAttribute("TestApp.snk")>
[C#] [assembly: AssemblyKeyFileAttribute("TestApp.snk")]
4. Enregistrer l"assembly qui contient votre classe au catalogue COM+
# Si le client de votre classe est #manag" (i.e. prise en charge par le common
language runtime), l"enregistrement est effectu par le CLR
# sinon vous pouvez anticiper l"usage de votre classe par du code non #manag",
en utilisant le service .Net d"enregistrement (Regsvcs.exe)
" Idem que #classe scurise"
# Couplage .Net / COM+
146 2007, M. Riveill
Les attributs #Transaction"
Proche des attributs de J2EE
! Disabled [Transaction(TransactionOption.Disabled)]
" Indique que cet objet ignore les transactions existantes (i.e. gre au niveau de .Net)
" Il peut appeler directement le Distributed Transaction Coordinator (DTC).
! NotSupported [Transaction(TransactionOption.NotSupported)]
" Indique que cet objet s"excute 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"excute hors transaction.
! Required (default) [Transaction(TransactionOption.Required)]
" Indique que cet objet s"excute toujours dans une transaction.
" Si le client est dans une transaction alors l"objet est inclus dans la transaction ; sinon l"objet dmarre
une transaction.
! RequiresNew [Transaction(TransactionOption.RequiresNew)]
" Indique que cet objet ncessite une nouvelle transaction.
" Si le client est dans une transaction alors l"objet dmarre une nouvelle transaction.
147 2007, M. Riveill
Transaction
Exemple : la classe
! En utilisant un attribut
[Transaction(TransactionOption.Required)]
public class Account : ServicedComponent {
// en labsence dexception commit
// sinon abort
[AutoComplete]
public void Debit(int amount) {
// effectue qq actions
// ventuellement avec accs une BD
}
}
! Contrle de la transaction par programme
[Transaction(TransactionOption.Required)]
public class Account : ServicedComponent {
public void Debit(int amount) {
// effectue qq actions
// ventuellement avec accs une BD
if (cest bon) {
// Commit
ContextUtil.SetComplete();
} else {
// Abort
ContextUtil.SetAbort();
}
}
}
148 2007, M. Riveill
Transaction
Exemple : main
using System;
using System.Runtime.CompilerServices;
using System.EnterpriseServices;
using System.Reflection;
// Nom de lapplication pour COM+
[assembly: ApplicationName("TestApp")]
// Nom fort de lassembly.
[assembly:AssemblyKeyFileAttribute("TestApp.snk")]
public class client {
public static int Main() {
Account accountX = new Account();
accountX.Debit(100);
return 0;
}
}
Demo
Transaction
.Net aujourd"hui
151 2007, M. Riveill
Le calendrier
! 2002
" .NET Framework 1.0
! 2003
" .NET Framework 1.1
! Fin 2005
" .NET Framework 2.0
! Fin 2006
" .NET Framework 3.0
! Fin 2007 (dbut
2008)
" .NET Framework 3.5
152 2007, M. Riveill
.Net 2.0
! Des bugs ont t corrigs
! Pleins de nouvelles classes
" ADO, ASP, WindowsForm
! Pleins de petites nouveauts
" Gnricit, delegate gnrique
" Classe partielle
" On signe la compilation /keyle, /delaysign
! Pleins de nouveaux outils
" Resgen.exe : internationalisation des applications
" Msbuild.exe : outil pour la construction d"une application
! Prise en compte des architectures 64 bits
! Mais rien de fondamental
" Le dtail ici : http://msdn.microsoft.com/fr-fr/library/t357fb32.aspx
153 2007, M. Riveill
.Net 3.0
! Sur ensemble du .NET Framework
2.0
" Aucune modication du framework
" Mais beaucoup de choses nouvelles
# De l"anecdotique
# Et du fondamental
! Comprend 4 briques fondamentales
" Windows Presentation Foundation
(WPF - Avalon)
" Windows Communication
Foundation (WCF - Indigo)
" Windows Workow Foundation (WF)
" Windows CardSpace (WCF)
! Dvelopp pour Windows Vista
" Mais disponibles en tant que
composants pour Windows XP/2003
" Les APIs de .Net 3.0
# seront reprise dans Vista
# remplaceront celles de XP
154 2007, M. Riveill
! http://wpf.netfx3.com
! Systme d"interface graphique
" Unie de l"interface utilisateur, documents, mdias
" Utilise un moteur de composition pour permettre l"afchage vectoriel
" Modle de programmation dclarative bas sur XAML (eXtensible Application Markup
Language)
# Sparation des rles entre designer et dveloppeur
" Faciliter le dploiement sur diffrentes plates-formes
# WPF /E (Windows Presentation Foundation /EveryWhere)
$ PC, Mac, Pocket PC, Smartphone, etc.
# Applications qui s"excutent dans un navigateur web (en ligne)
Windows Presentation Foundation
WPF (Avalon)
155 2007, M. Riveill
Windows Communication Foundation
WCF (Indigo)
! http://wcf.netfx3.com/
! Unie le dveloppement des applications distribus
" Multi-protocoles
" Sres
# intrit, condentialit, authentication
autorisation, audit de la communication
" Fiables
# transactions, isolation, concurrence
! Approche orientes services
" Services isols
" Indpendant de la localisation
" Indpendant du transport, du protocole et du format
" Indpendant des plateformes et de limplentation
" Doit pouvoir fonctionner quel que soit les dispositifs de mont en charge
mis en place (ferme de processeur)
" Doit pouvoir fonctionner mme lorsque lne des parties nest pas
disponible
156 2007, M. Riveill
! http://wf.netfx3.com
! Permet la programmation de workow selon
diffrents paradigmes
Windows Workow Foundation
WF
A base de rgles
Step2
Step1
Rule1
Rule2
Data
Les donnes
dfinissent le flux
Squentiel
La structure dfinit
le flux dexcution
Automate tats
Les vnements
dfinissent le flux
157 2007, M. Riveill
Windows CardSpace
WCS (Infocard)
! http://cardspace.netfx3.com
! Un meta systme d"indentit
" Carte d"identits virtuelles
" Fait suite Passport et reprend des lments de WS-security, WS-Trust
" Identit = ensemble d"afrmations
# Afrmation = qq chose que qq dit de moi
ou qq chose que je dis de moi
" Chaque identit est reprsent par une carte (logotype - RFC3709)
# Un utilisateur peut avoir plusieurs identits / cartes
$ Une carte anonyme, mise par moi avec des informations gnriques et fausses
$ Une carte personnelle, mise par moi mais avec des informations vraies
$ Une carte mise par un fournisseur d"identit rput
$ Des cartes spcialises (banques, rputation sur eBay, )
158 2007, M. Riveill
.Net 3.5
! On continue
l"enrichissement
" Ou l"engraissement
" On s"loigne de la norme
d"origine
! 3 nouveauts
" LINQ (Language INtegrated
Query)
" Nouvelle version d"ASP
" CLA Add-in framework
! Et d"autres amliorations
plus mineures
159 2007, M. Riveill
LINQ
Language INtegrated Query
! Effectuer des requtes sur des
donnes de diffrents types
var vieuxBasques = Personnes
.Where(s => s.Age > 50)
.Where(s => s.CP == "64")
.OrderBy(s => s.Nom)
.Select(s => s);
" Disponible pour diffrents
langages de .Net (VB, C#)
" Possibles pour les
# Objets
# Dataset
# Base de donnes
# Documents XML
" Reprend les oprateurs usuels
des bases de donnes
# select, where, min,
max, count,
# 40 oprateurs
Objects Objects
<book>
<title/>
<author/>
<price/>
</book>
XML XML Relational Relational
LINQ enabled data sources LINQ enabled data sources
LINQ LINQ
To Objects To Objects
LINQ LINQ
To XML To XML
LINQ enabled ADO.NET LINQ enabled ADO.NET
VB VB Others Others
LINQ LINQ
To Entities To Entities
LINQ LINQ
To SQL To SQL
LINQ LINQ
To Datasets To Datasets
.Net Language Integrated Query (LINQ) .Net Language Integrated Query (LINQ)
C# C#
160 2007, M. Riveill
ASP.Net 3.5
ASP.Net AJAX
! Complment ASP.Net 2.0
! Intgration d"AJAX (Asynchronous JavaScript
And XML)
! Utilise : HTML ou XHTML, les feuilles de styles
CSS, JavaScript, le modle objet de document
(DOM), XML, XSLT, et l'objet XMLHttpReques
161 2007, M. Riveill
CLR Add-IN framework
! Favoriser l"extension sre d"une application
" Nouvel espace de nom du CLR : #System.AddIn"
! Principales fonctionnalits
" Dcouvertes
" Activation
" Isolation
" Dchargement
" Sandbowing
Evaluation
Le multi-langage
Comparaison avec le monde Java
163 2007, M. Riveill
Le multi-langage est une ralit
164 2007, M. Riveill
Le multi-langage est une ralit
ClassJava
Java
Print
cplusplus
Cplusplus
Print
Csharp
Csharp
Main
Csharpfromjava Print2
Hritage
Print
On peut crire des classes qui hritent de classes crites dans un autre langage
165 2007, M. Riveill
Mais
! Peut-on assembler des composants sans se proccuper du
langage d"implmentation ?
! Est-ce que le comportement du client dpend du langage
d"implmentation du serveur, du cadriciel ou de l"extension ?
L1
client
L3
cadriciel
L2
extension
contrat
Etude ralises par Antoine.Beugnard@enst-bretagne.fr
166 2007, M. Riveill
Rednition / surcharge
! Rednir
" Modier une mthode (corps)
" Spcialiser des arguments (covariance)
" Gnraliser des arguments (contravariance)
! Surcharger
" Dnir une nouvelle mthode en utilisant le mme nom (ou le
mme symbole)
Mcanisme ou intention implicite
Interprtations dlicates
167 2007, M. Riveill
Une premire exprience
! Hritage et surcharge ne sont pas
identiques pour tous les langages
! Une hirarchie de classe
class Top
class Middle extends Top
class Bottom extends Middle
! Une seconde hirarchie de classe
class Up
// cv : redfinition covariante
method cv(Top t) print "Up"
// ctv : redfinition contravariante
method ctv(Bottom b) print "Up"
class Down extends Up
method cv(Middle m) print "Down"
method ctv(Midle m) print "Down"
168 2007, M. Riveill
Une premire exprience
! Un programme
Up u = new UpDown
d = new Down
Up ud = new Down
// puis tous les appels possibles
u.cv(new Top); d.cv(new Top); ud.cv(new Top) ;
u.cv(new Middle) ; d.cv(new Middle) ;
u.cv(new Bottom) ;
u.ctv(new Top) ;
// soit 18 appels
169 2007, M. Riveill
La signature du langage C++
Up Down Up
ctv(Bottom)
Error Down Error
ctv(Middle)
Error Error Error
ctv(Top)
Up Down Up
cv(Bottom)
Up Down Up
Cv(Middle)
Up Error Up
cv(Top)
ud d u
C++
Commentaire : C++ .Net se comporte comme C++
170 2007, M. Riveill
La signature du langage C#
Up Down Up
ctv(Bottom)
Error Down Error
ctv(Middle)
Error Error Error
ctv(Top)
Up Down Up
cv(Bottom)
Up Down Up
Cv(Middle)
Up Up Up
cv(Top)
ud d u
C#
171 2007, M. Riveill
La signature du langage VB
Up Up Up
ctv(Bottom)
Error Down Error
ctv(Middle)
Error Error Error
ctv(Top)
Up Down Up
cv(Bottom)
Up Down Up
Cv(Middle)
Up Up Up
cv(Top)
ud d u
VB
172 2007, M. Riveill
Signature des 3 langages
C++ / C# / VB
Up Down | Down | Up Up
ctv(Bottom)
Error Down Error
ctv(Middle)
Error Error Error
ctv(Top)
Up Down Up
cv(Bottom)
Up Down Up
Cv(Middle)
Up Error | Up | Up Up
cv(Top)
ud d u
C++ / C# / VB
L"tude a t mene pour de nombreux autres langages :
http://perso-info.enst-bretagne.fr/~beugnard/papiers/lb-sem.shtml
173 2007, M. Riveill
Une seconde exprience
L1
client
L3
cadriciel
1 rcepteur potentiel :
Up u = new Up;
6 invocations :
r.cv(new Top);
r.cv(new Middle);
r.cv(new Bottom);
r.ctv(new Top);
r.ctv(new Middle);
r.ctv(new Bottom);
cv(Top)
ctv(Bottom) Top
Middle
Bottom
Up
cv(Top t) ^ Up
ctv(Bottom b) ^Up
Down d = new Down;
Up ud = new Down;
3 rcepteurs potentiels :
L2
extension
cv(Middle)
ctv(Middle)
Down
cv(Middle m) ^Down
ctv(Middle m) ^ Down
contrat
L"exprience reprend le mme principe que la prcdente
174 2007, M. Riveill
La procdure de comparaison
! Utilisation de .NET
" Visual Basic, C# et C++
! Chacun est utilis pour
" Le cadriciel
" L"extension
" Le client
! Soit 27 assemblages de composants
Langages de la mme famille
175 2007, M. Riveill
L1
L2
La procdure de comparaison
Top
Middle
Bottom
Up
cv(Top t) ^Up
ctv(Bottom b) ^Up
Redfinition covariante
Redfinition contravariante
Down
cv(Middle m) ^Down
ctv(Middle m) ^Down
3 rcepteurs potentiels :
Up u = new Up;
Down d = new Down;
Up ud = new Down;
6 invocations :
r.cv(new Top);
r.cv(new Middle);
r.cv(new Bottom);
r.ctv(new Top);
r.ctv(new Middle);
r.ctv(new Bottom);
176 2007, M. Riveill
Client C# (L3)
C++ C# C# C++
C++ C# C# VB
C++ C# C# C#
C++ VB C# L1
L2
L1 : cadriciel L2 : extension L3 : Client
177 2007, M. Riveill
Client Visual Basic (L3)
C++ C# VB C++
C++ VB VB VB
C++ VB VB C#
C++ VB C# L1
L2
L1 : cadriciel L2 : extension L3 : Client
178 2007, M. Riveill
Client C++ (L3)
C++ C++ C++ C++
C++ C++ C++ VB
Nouveau
langage
Nouveau
langage
Nouveau
langage
C#
C++ VB C# L1
L2
L1 : cadriciel L2 : extension L3 : Client
179 2007, M. Riveill
Signature du nouveau langage
Up Up Up
ctv(Bottom)
Error Down Error
ctv(Middle)
Error Error Error
ctv(Top)
Up Down Up
cv(Bottom)
Up Down Up
Cv(Middle)
Up Erreur Up
cv(Top)
ud d u
VB/C++ (???)
Signature inconnue !
180 2007, M. Riveill
Synthse
Cadriciel
Client
C#
Client
Client C++
Cadriciel Client Client VB
Cadriciel
Cadriciel
Nouveau langage
Client
Client
Nouveau langage
Client
Client
Nouveau langage
C#
C++ VB C# L1
L2
L1 : cadriciel L2 : extension
L3 : Client (C#, VB, C++)
Attention : en .NET, les composants ne peuvent pas tre considrs comme des
boites noires
Java vs .Net
Performances comparatives
http://www.dotnetguru.org/articles/Comparatifs/benchJ2EEDotNET/J2EEvsNETBench.html
182 2007, M. Riveill
Historique
Java 1.5
-Boxing
-Gnricit
J2EE
EJB
JSP
JDBC
Java
Java language
Java VM
J2SE
Java
.Net 2.0
-Gnricit
.NET Framework
CLR
C#, VB.NET
Nouvelle
gnration de
COM+, ASP, ADO
Web services /
MyServices
Windows DNA
MTS (! COM+)
ASP
ADO
Microsoft
2005 2001 1998 1996
183 2007, M. Riveill
Appel de procdure
184 2007, M. Riveill
Application graphique
185 2007, M. Riveill
Services web
186 2007, M. Riveill
Quelques lments de comparaison
J2EE Jonas (par
exemple)
Tomcat
MySQL
Framework .Net
Cassini
MSDE
Plate-forme (gratuite)
Java 2 Micro-Edition
(J2ME)
Windows CE/ .NET
compact Framework
Terminaux lger
30+ Microsoft Vendeurs
Standard (contrle par
JCA)
Propritaire (norme
ECMA / ISO)
Technologie
Indpendant de la plate-
forme
Windows Plate-forme cible
Java C# et les autres
Langage de
programmation
J2EE .Net
187 2007, M. Riveill
Quelques lments de comparaison
IBM WebSphere
Application Server
BEA WebLogic
Application Server
Windows 2000/XP +
Services applicatifs
(IIS,NLB,MSMQ,COM+) +
.NET Framework
Serveur d"application
Eclipse WebMatrix
Environnement de
dveloppement
(gratuit)
IBM WebSphere
Application Developper
BEA CAJUN
Borland JBuilder
Oracle JDevelopper
Visual Studio.Net
Environnement de
dveloppement
(commerciaux)
J2EE .Net
188 2007, M. Riveill
Autres lments de comparaison
OUI OUI (COM+)
Service mifeware
(persistance, scurit,
transaction, )
Oui Oui Intgration Web service
Java Connector Architecture-
JCA
COM Intgration application
Msg EJBs / JMS MSMQ Intgration message
EJB-SQL/JDBC ADO.Net Intgration base de donnes
EJBs Managed .Net component Composants mtiers
JSP/Servlets ASP.Net Pages dynamiques
Swing MFC Client #graphique"
JVM/JRE CLR Environnement d"excution
Java Bytecode MSIL (typ) Langage interprt
J2EE .Net
189 2007, M. Riveill
Les plates-formes
Operating System
Java Virtual Machine
Java Base API
(AWT, IO, Collections, etc.)
Java Extension API
(javax.*)
Java Enterprise API
(EJB, JSP, JDBC, JNDI, JTS, etc.)
Java Language
Operating System
Common Language Runtime
Base Class Library
ADO.NET and XML
ASP.NET
Web Forms
Web Services
Windows
Forms
Common Language
Specification
VB C++ C# JScript J#
V
i
s
u
a
l

S
t
u
d
i
o
.
N
E
T
190 2007, M. Riveill
Bibliothque de Classes
Serveur d" Applications
GUI
Services
Transaction
Services
Web
Scripting
Data
Access
Autre
Systme dexploitation
Environment dExcution
Appli
Browser
Appli
Services Web
Autres
Applis
Appli
Locale
191 2007, M. Riveill
Standard Java Packages
Les Serveurs d"Applications Java
Swing Enterprise
JavaBeans
JavaServer
Pages
JDBC JNDI
JMS

Windows, Solaris, Linux, others


Java Virtual Machine (VM)
J2EE J2EE
Appli
Browser
Appli
Services Web
Autres
Applis
Appli
Locale
192 2007, M. Riveill
Base Class Library
Le .NET Framework
Windows
Forms
COM+
Services
ASP.NET ADO.NET Autres
Windows
Common Language Runtime
Appli
Browser
Appli
Services Web
Autres
Applis
Appli
Locale
.NET Framework .NET Framework
193 2007, M. Riveill
Pet Store
Lignes de codee
194 2007, M. Riveill
Pet Store
Inuence du serveur application
195 2007, M. Riveill
Pet Store
services Web
Quatrime Partie
Pour aller plus loin
197 2007, M. Riveill
Inside ROTOR
! Pour ceux qui veulent regarder le cur du CLR
" Gestion de composants, chargement dynamique de code
! Exemple d"implmentation des standards ECMA
" 334: C# language
" 335: Common Language Infrastructure (CLI)
! Non-commercial, distribution du source code
" Modiable (et document pour modication)
" Facile re-distribuer et partager des ajouts
! Implmentation sur plusieurs plates-formes
" Code qui s"excute sur FreeBSD, Windows XP et MacOS X
" Architecture du code permettant d"tre aisment dploy sur
d"autres plates-formes
198 2007, M. Riveill
Programmer avec .Net
! Travaux dirigs permettant de dmarrer avec la plate-forme
! Peut-tre fait de manire autonome
" http://rangiroa.polytech.unice.fr/riveill/enseignement/tp/carteVisite.html
1. Mise en place d"un environnement #minimal" de dveloppement
# .Net SDK et .Net framework (C#, CLR)
# WebMatrix (un IDE simple d"utilisation)
$ serveur Web inclue dans WebMatrix ncessaire pour pages dynamiques et web services -
ASP.Net/ASM.Net)
$ Pour les vielles versions de Windows, penser installer MDAC (Microsoft Data Access Component v1.6
ou ultrieur) ncessaire pour accder aux donnes
2. Etude d"une application .Net pour la gestion de carte de visite

Vous aimerez peut-être aussi