.NET Framework, C# et.NET Remoting Sébastien Boulay Master GI – option SRR 25 novembre 2004
Sommaire.NET Framework.NET Framework Introduction Introduction Architecture et fonctionnement Architecture et fonctionnement Standardisation et interopérabilité Standardisation et interopérabilité C# C# Concepts de base Concepts de base Types et variables Types et variables Classes Classes Fonctionnalités avancées Fonctionnalités avancées.NET Remoting.NET Remoting Principe Principe Configuration ConfigurationDemos.NET Framework, C# et.NET Remoting 2
Introduction Technologie proposée par Microsoft Technologie proposée par Microsoft Plateforme de développement et dexécution Plateforme de développement et dexécution Orientée environnements distribués Orientée environnements distribuésObjectifs Contexte dexécution robuste et sécurisé Contexte dexécution robuste et sécurisé Déploiement et administration simplifié Déploiement et administration simplifié Intégration de lexistant Intégration de lexistant Développement dapplications simplifié Développement dapplications simplifié.NET Framework, C# et.NET Remoting 3.NET Framework
Architecture Visual Basic CLS (Common Language Specification) ASP.NET CLR (Common Language Runtime) Système dexploitation C#J#Managed C++JScript… ADO.NET et XML Classes.NET Framework Windows Forms WindowsRed HatDebian Free BSD … Plateforme.NET, C# et.NET Remoting 4 Plateforme.NET
Microsoft Intermediate Language Format intermédiaire Format intermédiaire Indépendant de la machine Indépendant de la machine Converti en langage machine par le CLR Converti en langage machine par le CLR Code managé Code managé Assemblage (assembly) Manifest Manifest Meta données Meta données Code MSIL Code MSIL Ressources Ressources.NET Framework, C# et.NET Remoting 5.NET Framework
Common Language Runtime Plateforme.NET, C# et.NET Remoting 6 Plateforme.NET Class Loader IL to Native Compilers Code Manager Garbage Collector Security EngineDebug Engine Type CheckerException Manager Thread SupportCOM Marshaler Base Class Library Support
CTS (Common Type Specification) Système de types unique Système de types unique Partagé par les compilateurs, outils et le CLR Partagé par les compilateurs, outils et le CLR Ensemble de règles interopérabilité des langages Common Language Specification.NET Framework, C# et.NET Remoting 7.NET Framework Object Unmanaged Managed Interface Built-in Reference Type Structural Equivalent Boxed Value Type Boxed Enum Array Built-in Value Type StringInteger Type Floating Point Type Typed Reference User Defined Enum Value Type Name Equivalent Delegate Self-Describing Function Pointer Reference Type Type
Fonctionnement Plateforme.NET, C# et.NET Remoting 8 Plateforme.NET Code source Code natif Compilateur Compilateur JIT Compilation Exécution Code MSIL Meta données A linstallation ou A la première exécution
Common Language Infrastructure Basé sur le CLR et la CLS Basé sur le CLR et la CLS Défini comme un standard Défini comme un standard ECMA-334, C# (C sharp) Language Specification. ECMA-334, C# (C sharp) Language Specification. ECMA-335, Common Language Infrastructure, approved by the ECMA General Assembly of 13th December ECMA-335, Common Language Infrastructure, approved by the ECMA General Assembly of 13th December ECMA TR/84, related to Standard ECMA-335 ECMA TR/84, related to Standard ECMA-335.NET Framework, C# et.NET Remoting 9.NET Framework
Multi-langages Microsoft Microsoft Visual Basic Visual Basic C# C# J# J# Managed C++ Managed C++ JScript JScript Autres Autres Ada Pascal Scheme Ada Pascal Scheme Perl Fortran Mercury Perl Fortran Mercury Python SmallTalk Oz Python SmallTalk Oz Cobol Caml Oberon Cobol Caml Oberon Eiffel Haskell … Eiffel Haskell ….NET Framework, C# et.NET Remoting 10.NET Framework
Multi-plateformes.NET Framework, C# et.NET Remoting 11.NET Framework Microsoft.NET MonoRotor Windows 98 / NT4 Windows 2000 / XP / 2003 FreeBSD Red Hat Fedora Core Suse Linux Mac OS X Et dautres projets en cours comme DotGNU Portable.NET
Sommaire.NET Framework.NET Framework Introduction Introduction Architecture et fonctionnement Architecture et fonctionnement Standardisation et interopérabilité Standardisation et interopérabilité C# C# Concepts de base Concepts de base Types et variables Types et variables Classes Classes Fonctionnalités avancées Fonctionnalités avancées.NET Remoting.NET Remoting Principe Principe Configuration ConfigurationDemos.NET Framework, C# et.NET Remoting 12
Présentation 13C# Orienté objet, jusquau bout, tout est objet Orienté objet, jusquau bout, tout est objet Similaire au C++ et au Java Similaire au C++ et au Java Premier langage orienté composant parmi la famille C / C++ Premier langage orienté composant parmi la famille C / C++ Dédié à la plateforme.NET Dédié à la plateforme.NET Conforme aux spécifications (CLS-compliant) Conforme aux spécifications (CLS-compliant) Permet dexploiter lensemble des fonctionnalités Permet dexploiter lensemble des fonctionnalités
Opérateurs.NET Framework, C# et.NET Remoting 14C# Unaires : + - ! ~ ++x --x (T)x Unaires : + - ! ~ ++x --x (T)x Arithmétiques : * / % + - Arithmétiques : * / % + - Décalage : > Décalage : > Relationnels : = == != Relationnels : = == != Logiques : & ^ | Logiques : & ^ | Conditionnels : && || ?: Conditionnels : && || ?: Assignation : = *= /= %= += -= Assignation : = *= /= %= += -= >= &= ^= |= >= &= ^= |= Condition ? Expression 1 : Expression 2
Instructions.NET Framework, C# et.NET Remoting 15C# Blocs Blocs {... }; Libellés Libellés x: instruction; Selections Selections if(x == 1)switch(i) {{ if(y == 2)case 0: {case 1: F();Choix(); }break; else {default: G();ChoixAutre(); }break; }}
Instructions.NET Framework, C# et.NET Remoting 16C# Itérations Itérations while(x != 0) {... }for(int i = 0; i < n; i++) {... } do {... } while(x == 0);foreach(object o in collection) {... } Sauts Sauts break;continue; goto libelle;return value; Gestion des exceptions Gestion des exceptions trythrow new Exception(); {... } catch(ArgumentException e) {... } catch(Exception e) {... } finally
Types.NET Framework, C# et.NET Remoting 17C# Valeurs Valeurs Types prédéfinis Types prédéfinis Enumérations Enumérations Structures Structures Allocation dans la pile (stack) Allocation dans la pile (stack) Ne peut être null Ne peut être null Références Références Tableaux Tableaux Délégués Délégués Classes Classes Interfaces Interfaces Allocation dans le tas (heap) Allocation dans le tas (heap) Peut être null Peut être null
Types prédéfinis.NET Framework, C# et.NET Remoting 18C# TypeDescriptionExemple object Type de base de tous les autres types object o = null; string Séquence de caractères Unicode string s = "Hello"; sbyte Entier signé de 8 bits sbyte val = 12; short Entier signé de 16 bits short val = 12; int Entier signé de 32 bits int val = 12; long Entier signé de 64 bits long val1 = 12; long val2 = 34L; byte Entier non signé de 8 bits byte val = 12; ushort Entier non signé de 16 bits ushort val = 12; uint Entier non signé de 32 bits uint val1 = 12; uint val2 = 34U; ulong Entier non signé de 64 bits ulong val1 = 12; ulong val2 = 34U; ulong val3 = 56L; ulong val4 = 78UL; float Flottant simple précision (32 bits, 1.7E +/ chiffres significatifs) float val = 1.23F; double Flottant double précision (64 bits, 3.4E +/- 38, 7 chiffres significatifs) double val1 = 1.23; double val2 = 4.56D; boolBooléen bool val1 = true; bool val2 = false; char Caractère Unicode char val = 'h'; decimal Décimal (28 chiffres significatifs) decimal val = 1.23M;
Enumerations.NET Framework, C# et.NET Remoting 19C# enum Color : longColor color; {switch(color) Red,{ Green,case Color.Red: Blue... }break; case Color.Blue:...break; case Color.Green:...break;default:break;}
Structures.NET Framework, C# et.NET Remoting 20C# struct Point { public int x,y; } struct Point { public int x,y; public Point(int x, int y) { this.x = x; this.y = y; } }
Tableaux.NET Framework, C# et.NET Remoting 21C# Une dimension Une dimension int[] myArray = new int[] {1, 3, 5, 7, 9}; string[] weekDays = {"Sun","Sat","Mon","Tue","Wed","Thu","Fri"}; Plusieurs dimensions Plusieurs dimensions int[,,] myArray = new int [4,2,3]; int[,] myArray = new int[,] {{1,2}, {3,4}, {5,6}, {7,8}}; Jagged (tableau de tableaux) Jagged (tableau de tableaux) int[][,] myJaggedArray = new int [3][,] { new int[,] { {1,3}, {5,7} }, new int[,] { {1,3}, {5,7} }, new int[,] { {0,2}, {4,6}, {8,10} }, new int[,] { {0,2}, {4,6}, {8,10} }, new int[,] { {11,22}, {99,88}, {0,9} } new int[,] { {11,22}, {99,88}, {0,9} } }; };
Classes.NET Framework, C# et.NET Remoting 22C# Nom Nom Attribut daccessibilité Attribut daccessibilité public non limité public non limité protected limité à la classe et aux classes dérivées protected limité à la classe et aux classes dérivées private limité à la classe private limité à la classe internal limité à lassemblage internal limité à lassemblage protected internal limité à lassemblage et aux classes dérivées protected internal limité à lassemblage et aux classes dérivées Attribut abstract (abstrait) Attribut abstract (abstrait) Attribut sealed (sellé) Attribut sealed (sellé) Classe de base (héritage simple de classe) Classe de base (héritage simple de classe) Interfaces implémentées (héritage multiple dinterfaces) Interfaces implémentées (héritage multiple dinterfaces) Membres Membres
Membres.NET Framework, C# et.NET Remoting 23C# Constantes Constantes Champs Champs Méthodes Méthodes Constructeurs Constructeurs Destructeurs Destructeurs Types Types Propriétés Propriétés Indexeurs Indexeurs Opérateurs Opérateurs Événements Événements
Constantes.NET Framework, C# et.NET Remoting 24C# class A { public const double X = 1.0; public const double Y = 2.0; public const double Z = 3.0; } class B { public const int X = C.Z + 1; public const int Y = 10; } class C { public const int Z = B.Y + 1; }
Champs.NET Framework, C# et.NET Remoting 25C# public class Color { public static readonly Color Black = new Color(0, 0, 0); public static readonly Color White = new Color(255, 255, 255); private byte red, green, blue; public Color(byte r, byte g, byte b) { red = r; green = g; blue = b; }} Attributs daccessibilité Attributs daccessibilité public non limité public non limité protected limité à la classe et aux classes dérivées protected limité à la classe et aux classes dérivées private limité à la classe private limité à la classe internal limité à lassemblage internal limité à lassemblage Attributs Attributs new champ cachant (classe dérivé) new champ cachant (classe dérivé) static champ de classe static champ de classe readonly champ en lecture seule (initialisé par le constructeur) readonly champ en lecture seule (initialisé par le constructeur) volatile champ volatile volatile champ volatile
Méthodes.NET Framework, C# et.NET Remoting 26C# Nom Nom Attribut daccessibilité Attribut daccessibilité public non limité public non limité protected limité à la classe et aux classes dérivées protected limité à la classe et aux classes dérivées private limité à la classe private limité à la classe internal limité à lassemblage internal limité à lassemblage Attributs new, static, virtual (virtuel), abstract, sealed, override (surcharge), extern Attributs new, static, virtual (virtuel), abstract, sealed, override (surcharge), extern Type de retour Type de retour Paramètres Paramètres
Méthodes abstraites.NET Framework, C# et.NET Remoting 27C# public abstract class Shape { public abstract void Paint(Graphics g, Rectangle r); public abstract void Paint(Graphics g, Rectangle r);} public class Ellipse: Shape { public override void Paint(Graphics g, Rectangle r) { public override void Paint(Graphics g, Rectangle r) { g.DrawEllipse(r); g.DrawEllipse(r); }} public class Box: Shape { public override void Paint(Graphics g, Rectangle r) { public override void Paint(Graphics g, Rectangle r) { g.DrawRect(r); g.DrawRect(r); }}
Méthodes virtuelles.NET Framework, C# et.NET Remoting 28C# class A { public virtual void F() { Console.WriteLine("A.F"); } public virtual void F() { Console.WriteLine("A.F"); }} class B: A { public override void F() { Console.WriteLine("B.F"); } public override void F() { Console.WriteLine("B.F"); }} class C: B { new public virtual void F() { Console.WriteLine("C.F"); } new public virtual void F() { Console.WriteLine("C.F"); }} class D: C { public override void F() { Console.WriteLine("D.F"); } public override void F() { Console.WriteLine("D.F"); }} class Test { static void Main() { static void Main() { D d = new D(); D d = new D(); A a = d; A a = d; B b = d; B b = d; C c = d; C c = d; a.F(); a.F(); b.F(); b.F(); c.F(); c.F(); d.F(); d.F(); }} B.F D.F
Constructeurs (instance).NET Framework, C# et.NET Remoting 29C# class Point { public double x, y; public Point() { this.x = 0; this.y = 0; } public Point(double x, double y) { this.x = x; this.y = y; } Initialiser linstance dune classe Initialiser linstance dune classe En cas dabsence de constructeur, un constructeur sans paramètre est implicitement créé En cas dabsence de constructeur, un constructeur sans paramètre est implicitement créé
Constructeur (classe).NET Framework, C# et.NET Remoting 30C# class A { public static int X; static A() { X = B.Y + 1; } class B { public static int Y = A.X + 1; static B() {} static void Main() { Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y); } Initialiser une classe Initialiser une classe Ne peut être appelé explicitement Ne peut être appelé explicitement Appelé automatiquement Appelé automatiquement Pas dattribut daccessibilité, pas de paramètre Pas dattribut daccessibilité, pas de paramètre
Destructeur.NET Framework, C# et.NET Remoting 31C# class A { public static int X; static A() { X = B.Y + 1; } class B { public static int Y = A.X + 1; static B() {} static void Main() { Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y); } Appelé automatiquement lors du processus de garbage collection Appelé automatiquement lors du processus de garbage collection Ne peut être appelé explicitement Ne peut être appelé explicitement Pas dattribut daccessibilité, pas de paramètre Pas dattribut daccessibilité, pas de paramètre
Types.NET Framework, C# et.NET Remoting 32C# public class List { // Private data structure private class Node { public object Data; public Node Next; public Node(object data, Node next) { this.Data = data; this.Next = next; } private Node first = null; private Node last = null; // Public interface public void AddToFront(object o) {...} public void AddToBack(object o) {...} public object RemoveFromFront() {...} public object RemoveFromBack() {...} public int Count { get {...} } } Déclaration dun type à lintérieur dune classe Déclaration dun type à lintérieur dune classe
Propriétés.NET Framework, C# et.NET Remoting 33C# Accéder aux caractéristiques dun objet ou dune classe Accéder aux caractéristiques dun objet ou dune classe longueur dune chaîne de caractères longueur dune chaîne de caractères taille dun tableau taille dun tableau titre dune fenêtre titre dune fenêtre dimensions dune image dimensions dune image … Deux comportements Deux comportements Lecture (get) Lecture (get) Écriture (set) Écriture (set) Mêmes attributs que les méthodes Mêmes attributs que les méthodes
Propriétés.NET Framework, C# et.NET Remoting 34C# abstract class A { int y; public virtual int X { get { return 0; } } public virtual int Y { get { return y; } set { y = value; } } public abstract int Z { get; set; } } class B: A { int z; public override int X { get { return base.X + 1; } } public override int Y { set { base.Y = value < 0? 0: value; } } public override int Z { get { return z; } set { z = value; } }
Indexeurs.NET Framework, C# et.NET Remoting 35C# Indexer une classe à la manière dun tableau Indexer une classe à la manière dun tableau public class Stack { private Node GetNode(int index) { Node temp = first; while (index > 0 && temp != null) { temp = temp.Next; index--; } if (index < 0 || temp == null) throw new Exception("Index out of range."); return temp; } public object this[int index] { get { return GetNode(index).Value; } set { GetNode(index).Value = value; }
Opérateurs.NET Framework, C# et.NET Remoting 36C# public struct Digit { byte value; public Digit(byte value) { if (value 9) throw new ArgumentException(); this.value = value; } public Digit(int value): this((byte) value) {} public static implicit operator byte(Digit d) { return d.value; } public static explicit operator Digit(byte b) { return new Digit(b); }
Opérateurs.NET Framework, C# et.NET Remoting 37C# public struct Digit { byte value; public Digit(byte value) { if (value 9) throw new ArgumentException(); this.value = value; } public Digit(int value): this((byte) value) {} public static Digit operator+(Digit a, Digit b) { return new Digit(a.value + b.value); } public static Digit operator-(Digit a, Digit b) { return new Digit(a.value - b.value); }
Opérateurs.NET Framework, C# et.NET Remoting 38C# public struct Digit { byte value; public Digit(byte value) { if (value 9) throw new ArgumentException(); this.value = value; } public Digit(int value): this((byte) value) {} public static bool operator==(Digit a, Digit b) { return a.value == b.value; } public static bool operator!=(Digit a, Digit b) { return a.value != b.value; } public override bool Equals(object value) { if (value == null) return false; if (GetType() == value.GetType()) return this == (Digit)value; return false; }
Délégués.NET Framework, C# et.NET Remoting 39C# Pointeurs de méthodes (vulgarisation) Pointeurs de méthodes (vulgarisation) Encapsule à la fois un objet et une méthode Encapsule à la fois un objet et une méthode Peut « pointer » vers plusieurs méthodes Peut « pointer » vers plusieurs méthodes delegate void D(int x); class C { public static void M1(int i) {...} public static void M2(int i) {...} } class Test { static void Main() { D cd1 = new D(C.M1); // M1 D cd2 = new D(C.M2); // M2 D cd3 = cd1 + cd2; // M1 + M2 D cd4 = cd3 + cd1; // M1 + M2 + M1 D cd5 = cd4 + cd3; // M1 + M2 + M1 + M1 + M2 }
Événements.NET Framework, C# et.NET Remoting 40C# Mécanisme de notification Mécanisme de notification Basé sur les délégués Basé sur les délégués Générateur dévénements Événement Consommateur dévénements Traitant dévénements Consommateur dévénements Traitant dévénements registration callback
Événements.NET Framework, C# et.NET Remoting 41C# public delegate void EventHandler(object sender, EventArgs e); public class Button: Control { public event EventHandler Click; protected void OnClick(EventArgs e) { if (Click != null) Click(this, e); } public class Form { Button Button1 = new Button(); public Form() { Button1.Click += new EventHandler(Button1_Click); } ~Form() { Button1.Click -= new EventHandler(Button1_Click); } void Button1_Click(object sender, EventArgs e) { Console.WriteLine("Button1 was clicked!"); }
Espaces de noms.NET Framework, C# et.NET Remoting 42C# Conteneur de classes ou despaces de nom Conteneur de classes ou despaces de nom Organiser des classes hiérarchiquement Organiser des classes hiérarchiquement Structurer les assemblages Structurer les assemblages class A {} // A namespace X // X { class B // X.B { class C {} // X.B.C } namespace Y // X.Y { class D {} // X.Y.D } namespace X.Y // X.Y { class E {} // X.Y.E }
Interfaces.NET Framework, C# et.NET Remoting 43C# Nom Nom Attribut daccessibilité Attribut daccessibilité public non limité public non limité protected limité à la classe et aux classes dérivées protected limité à la classe et aux classes dérivées private limité à la classe private limité à la classe internal limité à lassemblage internal limité à lassemblage Interfaces de base (héritage multiple dinterfaces) Interfaces de base (héritage multiple dinterfaces) Membres Membres Méthodes Méthodes Propriétés Propriétés Indexeurs Indexeurs Événements Événements
Fonctionnalités avancées.NET Framework, C# et.NET Remoting 44C# Section critique, exclusion mutuelle Section critique, exclusion mutuelle class Account { int balance; int balance; public Account(int initial) { public Account(int initial) { balance = initial; balance = initial; } int Withdraw(int amount) { int Withdraw(int amount) { if (balance < 0) throw new Exception("Negative Balance"); if (balance < 0) throw new Exception("Negative Balance"); lock (this) { lock (this) { if (balance >= amount) { if (balance >= amount) { balance = balance - amount; balance = balance - amount; return amount; return amount; } else { else { return 0; return 0; } } }}
Fonctionnalités avancées.NET Framework, C# et.NET Remoting 45C# Contrôle de débordement lors dopérations arithmétiques sur les entiers Contrôle de débordement lors dopérations arithmétiques sur les entiers class OverFlowTest { static short x = 32767, y = 32767; static short x = 32767, y = 32767; public static int myMethodCheck() { public static int myMethodCheck() { int z = 0; int z = 0; try { try { z = checked((short)(x + y)); z = checked((short)(x + y)); } catch (System.OverflowException e) { catch (System.OverflowException e) { System.Console.WriteLine(e.ToString()); System.Console.WriteLine(e.ToString()); } return z; return z; } public static int myMethodUncheck() { public static int myMethodUncheck() { int z = unchecked((short)(x + y)); int z = unchecked((short)(x + y)); return z; return z; }}
unboxing :type référence type valeur unboxing :type référence type valeur boxing :type valeur type référence boxing :type valeur type référence Fonctionnalités avancées.NET Framework, C# et.NET Remoting 46C# Boxing / Unboxing Boxing / Unboxing Mécanisme de conversion entre un type valeur et un type référence Mécanisme de conversion entre un type valeur et un type référence 123 i int i = 123; Sur la pileSur le tas 123 o object o = i; int (i boxed) 123 int i = 123; object o = i; 123 i int i = 123; Sur la pileSur le tas 123 o object o = i; int (i boxed) 123 int i = 123; object o = i; int j = (int)o; 123 j int j = (box)o;
Fonctionnalités avancées.NET Framework, C# et.NET Remoting 47C# Code unsafe Code unsafe Manipulation de bas niveau (pointeurs) Manipulation de bas niveau (pointeurs) Autorise les conversions de types Autorise les conversions de types Autorise les opérations arithmétiques sur les pointeurs Autorise les opérations arithmétiques sur les pointeurs Semblable à du code C inline Semblable à du code C inline Allocation sur la pile ( stackalloc ) Allocation sur la pile ( stackalloc ) class Test { unsafe void Method() { unsafe void Method() { char* buf = stackalloc char[256]; char* buf = stackalloc char[256]; for(char* p = buf; p < buf + 256; p++) *p = 0; for(char* p = buf; p < buf + 256; p++) *p = 0; }}
Fonctionnalités avancées.NET Framework, C# et.NET Remoting 48C# Code unsafe Code unsafe Fixer ladresse mémoire dune variable à lexécution ( fixed ) Fixer ladresse mémoire dune variable à lexécution ( fixed ) class Test { static int x; static int x; int y; int y; unsafe static void F(int* p) { unsafe static void F(int* p) { *p = 1; *p = 1; } static void Main() { static void Main() { Test t = new Test(); Test t = new Test(); int[] a = new int[10]; int[] a = new int[10]; unsafe { unsafe { fixed (int* p = &x) F(p); fixed (int* p = &x) F(p); fixed (int* p = &t.y) F(p); fixed (int* p = &t.y) F(p); fixed (int* p = &a[0]) F(p); fixed (int* p = &a[0]) F(p); fixed (int* p = a) F(p); fixed (int* p = a) F(p); } }}
Sommaire.NET Framework.NET Framework Introduction Introduction Architecture et fonctionnement Architecture et fonctionnement Standardisation et interopérabilité Standardisation et interopérabilité C# C# Concepts de base Concepts de base Types et variables Types et variables Classes Classes Fonctionnalités avancées Fonctionnalités avancées.NET Remoting.NET Remoting Principe Principe Configuration ConfigurationDemos.NET Framework, C# et.NET Remoting 49
Principe 50.NET Remoting Invoquer des méthodes sur objets distants Invoquer des méthodes sur objets distants Deux rôles Deux rôles Client Client Serveur Serveur Canal de communication (http, tcp) Canal de communication (http, tcp) Objet serveur Système distant Objet client Système distant Proxy Canal
Principe.NET Framework, C# et.NET Remoting 51.NET Remoting Formattage Formattage Binaire Binaire SOAP SOAP … Objet serveur Système distant Objet client Système distant Proxy Canal Formatteur Objet serveur Système distant Objet client Système distant Proxy Canal Formatteur
Principe.NET Framework, C# et.NET Remoting 52.NET Remoting Deux types dobjets distants Deux types dobjets distants MarshallByValue MarshallByValue Sérialisation Sérialisation Copie vers le client Copie vers le client MarshallByReference MarshallByReference Utilisation de proxy Utilisation de proxy Stocké sur le serveur Stocké sur le serveur
Configuration.NET Framework, C# et.NET Remoting 53.NET Remoting Deux modes de configuration Deux modes de configuration Par fichier de configuration Par fichier de configuration Par programmation Par programmation
Demos Hello World Hello World Simple Remoting Simple Remoting Javanaise.NET Javanaise.NET Quake II.NET Quake II.NET.NET Framework, C# et.NET Remoting 54Demos
Hello World.NET Framework, C# et.NET Remoting 55Demos using System; namespace Hello { public class Hello { public static void Main(string[] args) { Console.WriteLine("Hello World !"); Console.WriteLine(); foreach(string s in args) {Console.Write(s);}}}}
Hello World.NET Framework, C# et.NET Remoting 56Demos Compilation en ligne de commande Compilation en ligne de commande csc /noconfig Hello.cs Exécution sur plusieurs plateformes Exécution sur plusieurs plateformes Windows XP Windows XP.NET Framework 1.1.NET Framework FreeBSD FreeBSD Rotor Rotor Red Hat Linux 9.1 Red Hat Linux 9.1 Mono Mono
Simple Remoting.NET Framework, C# et.NET Remoting 57Demos Objet distribué (écrit en Visual Basic) Objet distribué (écrit en Visual Basic)'RemotableType.vb Imports System Public Class RemotableType Inherits MarshalByRefObject Inherits MarshalByRefObject Private _internalString As String = "This is the RemotableType." Private _internalString As String = "This is the RemotableType." Public Function StringMethod(param As String) As String Public Function StringMethod(param As String) As String Console.WriteLine("Call from " + param) Console.WriteLine("Call from " + param) Return _internalString Return _internalString End Function 'StringMethod End Function 'StringMethod End Class 'RemotableType Compilation Compilation vbc /t:library RemotableType.vb
Simple Remoting.NET Framework, C# et.NET Remoting 58Demos Serveur (écrit en C#) Serveur (écrit en C#) // Host.cs using System; using System.Runtime.Remoting; namespace Remoting { public class Host { public static void Main() { RemotingConfiguration.Configure("Host.exe.config"); Console.WriteLine("Listening for requests. Press Enter to exit..."); Console.ReadLine();}}} Compilation Compilation csc /noconfig /r:RemotableType.dll Host.cs
Simple Remoting.NET Framework, C# et.NET Remoting 59Demos Configuration du serveur Configuration du serveur <configuration> <wellknown <wellknown mode="Singleton" mode="Singleton" type="RemotableType, RemotableType" type="RemotableType, RemotableType" objectUri="RemotableType.rem" objectUri="RemotableType.rem" /> /> </configuration>
Simple Remoting.NET Framework, C# et.NET Remoting 60Demos Client (écrit en C#) Client (écrit en C#) // Client.cs using System; using System.Runtime.Remoting; namespace Remoting { public class Client { public static void Main(string[] args) { string param; if(args.Length != 1) { param = "nowhere :-/"; } else { param = args[0]; } RemotingConfiguration.Configure("Client.exe.config"); RemotableType remoteObject = new RemotableType(); Console.WriteLine(remoteObject.StringMethod(param));}}} Compilation Compilation csc /noconfig /r:RemotableType.dll Client.cs
Simple Remoting.NET Framework, C# et.NET Remoting 61Demos Configuration du client Configuration du client <configuration> <wellknown <wellknown type="RemotableType, RemotableType" type="RemotableType, RemotableType" url="tcp:// :6969/RemotableType.rem" url="tcp:// :6969/RemotableType.rem" /> /> </configuration>
Simple Remoting.NET Framework, C# et.NET Remoting 62Demos Exécution Exécution Serveur sous Windows XP Serveur sous Windows XP Client sous Windows XP Client sous Windows XP Client sous FreeBSD Client sous FreeBSD Client sous Red Hat Linux 9.1 Client sous Red Hat Linux 9.1
Javanaise.NET.NET Framework, C# et.NET Remoting 63Demos Portage du projet Javanaise Java C# Portage du projet Javanaise Java C# Exécution sous Windows XP (WinForms) Exécution sous Windows XP (WinForms)
Quake II.NET.NET Framework, C# et.NET Remoting 64Demos Observation de performances Observation de performances Version native Version native 69.3 FPS 69.3 FPS Version managée Version managée 56.0 FPS 56.0 FPS
Ressources.NET Framework, C# et.NET Remoting
Discussion.NET Framework, C# et.NET Remoting 66 Questions ?