Professional Documents
Culture Documents
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
}