Vous êtes sur la page 1sur 100

Intergiciels

IntergicielsObjets
ObjetsRpartis
Rpartis::
Exemple
ExemplededeJava
JavaRMIRMIet
etde
de.NET
.NETRemoting
Remoting

Samia Bouzefrane

Matre de Confrences

CEDRIC CNAM

samia.bouzefrane@cnam.fr
http://cedric.cnam.fr/~bouzefra

1 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Introduction
Introduction

2 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Notion dIntergiciel (Middleware))

 Intergiciel : est une classe de logiciels systmes qui permet dimplanter


une approche rpartie: exemple CORBA

 Fournit une API dinteraction et de communication: interactions de


haut niveau pour des applications rparties: exemple invocation
distante de mthode pour des codes objets.

 Fournit un ensemble de services utiles pour des applications


sexcutant en environnement rparti: dsignation, cycle de vie,
scurit, transactionnel, etc.

 Fonctionne en univers ouvert (supporte des applications tournant sur


des plate-formes matrielles et logicielles diffrentes).

3 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Principales Catgories dIntergiciels

 Intergiciels messages
 MOM: Message Oriented Middleware : JMS (Java Message Service
de J2EE de Sun), Microsoft Message Queues Server, etc.

 Intergiciels de bases de donnes (ODBC)

 Intergiciels appel de procdure distante (DCE)

 Intergiciels objets rpartis (CORBA, JAVA RMI, .NET Remoting)

 Intergiciels composants (EJB, CCM, Web services)

4 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Communication
Communicationdans
dansununcontexte
contexterparti:
rparti:
exemple
exemplede
delinvocation
linvocationde
demthodes
mthodesdistantes
distantes

5 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Lappel de procdure distante

Mode de communication entre deux programmes distants


Un programme jouera le rle de client
Lautre programme jouera le rle de serveur

Le but de linteraction du client avec le serveur


 le client peut faire excuter distance une procdure par le serveur.

Service basique (API dappel de procdure distante, bibliothque systme)


/* Ct client : invoque lappel distant et rcupre le rsultat*/
invoque (id_client, id_serveur, nom_procedure, paramtres);
/* Ct serveur : reoit, traite un appel et rpond */
traite (id_client, id_serveur, nom_procedure, paramtres);

Service niveau langage (API dfinie au niveau du langage de programmation)


/* Ct client : on invoque une procdure localise distance*/
ref_objet_serveur.nom_procedure (paramtres);
/* Ct serveur : on dploie lobjet qui implante la procdure*/
method nom_procedure (paramtres);
6 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Avantages de lappel de procdure distante

 Saffranchir du ct basique des communications en mode message


Ne pas avoir programmer des changes au niveau rseau en mode message.

Utiliser une structure familire: lappel de procdure


Problme: ne pas ignorer les diffrences centralis/rparti.

 Disposer de mcanismes modernes de programmation


 Vision modulaire des applications rparties (en approche objets rpartis
ou par composants sur tagres).
 Rutilisation en univers rparti.

7 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les implantations de lappel de procdure distante

 Les approches RPC traditionnelles


SUN RPC

 Approches RPC intgres dans les systmes dobjets rpartis


- OMG CORBA (Object Management Group - Common Object Request
Broker Architecture )
- SUN Java RMI
- Microsoft .NET

Approches RPC intgres dans les systmes de composants


- SUN J2EE EJB: Java 2 (Platform) Enterprise Edition Enterprise Java Beans
- OMG CCM: Object Management Group - Corba Component Model
- WS-SOAP: Web Services - Simple Object Access Protocol

8 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Java Remote Method Invocation (RMI)
ou les invocations de mthodes Java distantes

9 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Rappel : Appel local (interface et objet)

public interface ReverseInterface {


String reverseString(String chaine);
}

public class Reverse implements ReverseInterface


{
public String reverseString (String ChaineOrigine){

int longueur=ChaineOrigine.length();
StringBuffer temp=new StringBuffer(longueur);
for (int i=longueur; i>0; i--) {
temp.append(ChaineOrigine.substring(i-1, i));}
return temp.toString();
}
}

10 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Rappel : Appel local (programme appelant )

import ReverseInterface;

public class ReverseClient


{
public static void main (String [] args)
{ Reverse rev = new Reverse();
String result = rev.reverseString (args [0]);
System.out.println ("L'inverse de "+args[0]+" est
"+result);

}
}

$javac *.java
$java ReverseClient Alice
Linverse de Alice est ecilA
$

11 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Quattend t-on dun objet distribu ?

Un objet distribu doit pouvoir tre vu comme un objet normal .

Soit la dclaration suivante :

ObjetDistribue monObjetDistribue;

On doit pouvoir invoquer une mthode de cet objet situ


sur une autre machine de la mme faon quun objet local :

monObjetDisribue.uneMethodeDeLOD();

12 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


On doit pouvoir utiliser cet objet distribu sans connatre
sa localisation. On utilise pour cela un service sorte dannuaire,
qui doit nous renvoyer son adresse.

monObjetDistribue=
ServiceDeNoms.recherche(myDistributedObject);

On doit pouvoir utiliser un objet distribu comme paramtre


dune mthode locale ou distante.

x=monObjetLocal.uneMethodeDeLOL(monObjetDistribue);

x= monObjetDistribue.uneMethodeDeLOD(autreObjetDistribue);

13 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


On doit pouvoir rcuprer le rsultat dun appel de mthode
sous la forme dun objet distribu.

monObjetDistribue=autreObjetDistribue.uneMethodeDeLOD();

monObjetDistribue=monObjetLocal.uneMethodeDeLOL();

14 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Java RMI
Remote Method Invocation

permet la communication entre machines virtuelles Java (JVM)


qui peuvent se trouver physiquement sur la mme machine
ou sur deux machines distinctes.

15 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Prsentation

RMI est un systme dobjets distribus constitu uniquement


dobjets java ;

RMI est une Application Programming Interface (intgre


au JDK 1.1 et plus) ;

Dvelopp par Sun ;

16 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


RMI
Mcanisme qui permet lappel de mthodes entre objets Java
qui sexcutent ventuellement sur des JVM distinctes ;

L appel peut se faire sur la mme machine ou bien


sur des machines connectes sur un rseau ;

Utilise les sockets ;

Les changes respectent un protocole propritaire :


Remote Method Protocol ;

RMI repose sur les classes de srialisation.

17 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Architecture
Invocation de la mthode distante Objet distant Application

Stub Squelette Prsentation

Couche rfrences Couche rfrences Session


distantes distantes

TCP/IP TCP/IP Transport/rseau

Interface Hard Interface Hard Liaison de donnes /Physique

18 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Appel local versus Appel distance

Client interface Objet Appel local

mthode+ arguments

Client interface Stub Skeleton interface Objet

retour + exception
Appel distant

Rseau

19 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les amorces (Stub/Skeleton)

Elles assurent le rle dadaptateurs pour le transport


des appels distants

Elles ralisent les appels sur la couche rseau

Elles ralisent lassemblage et le dsassemblage des paramtres


(marshalling, unmarshalling)

Une rfrence dobjets distribu correspond une rfrence


damorce

Les amorces sont cres par le gnrateur rmic.

20 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les Stubs (Souches)
Reprsentants locaux de lobjet distribu ;

Initient une connexion avec la JVM distante en transmettant


linvocation distante la couche des rfrences dobjets ;

Assemblent les paramtres pour leur transfert la JVM distante ;

Attendent les rsultats de linvocation distante ;

Dsassemblent la valeur ou lexception renvoye ;

Renvoient la valeur lappelant ;

Sappuient sur la srialisation.


21 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Les Skeleton (squelettes)

Dsassemblent les paramtres pour la mthode distante ;

Font appel la mthode demande ;

Assemblage du rsultat (valeur renvoye ou exception)


destination de lappelant.

22 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


La couche des rfrences dobjets
Remote Reference Layer
Permet dobtenir une rfrence dobjet distribu partir de
la rfrence locale au stub ;
Cette fonction est assure grce un service de noms
rmiregister (qui possde une table de hachage dont les cls
sont des noms et les valeurs sont des objets distants) ;
Un unique rmiregister par JVM ;

rmiregister sexcute sur chaque machine hbergeant


des objets distants ;
rmiregister accepte des demandes de service sur le port 1099;

23 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


La couche transport

ralise les connexions rseau bases sur les flux entre les JVM

emploie un protocole de communication propritaire (JRMP:


Java Remote Method Invocation) bas sur TCP/IP

Le protocole JRMP a t modifi afin de supprimer la ncessit


des squelettes car depuis la version 1.2 de Java, une mme classe
skeleton gnrique est partage par tous les objets distants.

24 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Etapes dun appel de mthode distante

Client Serveur
Serveur de
noms
3. Interroger
2. Publier
Application Cliente

1. Exposer Objet
4. Rcuprer distant

Serveur dobjets
7. Appel mthode
6. Arguments
5. Appel de mthode srialisation

Skeleton
Stub
10. Retour 8. Retour
9. Rsultat

25 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Dvelopper une application avec RMI : Mise en uvre
1. Dfinir une interface distante (Xyy.java) ;

2. Crer une classe implmentant cette interface (XyyImpl.java) ;

3. Compiler cette classe (javac XyyImpl.java) ;

4. Crer une application serveur (XyyServer.java) ;

5. Compiler lapplication serveur ;

6. Crer les classes stub et skeleton laide de rmic XyyImpl_Stub.java et


XyyImpl_Skel.java (Skel nexiste pas pour les versions >1.2) ;

7. Dmarrage du registre avec rmiregistry ;

8. Lancer le serveur pour la cration dobjets et leur enregistrement dans rmiregistry;

9. Crer une classe cliente qui appelle des mthodes distantes de lobjet distribu
(XyyClient.java) ;
10. Compiler cette classe et la lancer.

26 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Inversion dune chane de caractres
laide dun objet distribu

Invocation distante de la mthode reverseString() dun objet


distribu qui inverse une chane de caractres fournie par lappelant.

On dfinit :
ReverseInterface.java : interface qui dcrit lobjet distribu
Reverse.java : qui implmente lobjet distribu
ReverseServer.java : le serveur RMI
ReverseClient.java : le client qui utilise lobjet distribu

27 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Fichiers ncessaires

Ct Client Ct Serveur

- linterface : ReverseInterface - linterface : ReverseInterface


- le client : ReverseClient - lobjet : Reverse
- le serveur dobjets : ReverseServer

28 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Interface de lobjet distribu
- Elle est partage par le client et le serveur ;
- Elle dcrit les caractristiques de lobjet ;
- Elle tend linterface Remote dfinie dans java.rmi.

Toutes les mthodes de cette interface peuvent dclencher


une exception du type RemoteException.
Cette exception est leve :
- si connexion refuse lhte distant
- ou bien si lobjet nexiste plus,
- ou encore sil y a un problme lors de lassemblage ou
le dsassemblage.

29 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Interface de la classe distante

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface ReverseInterface extends Remote {


String reverseString(String chaine) throws RemoteException;
}

30 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Implmentation de lobjet distribu

Limplmentation doit tendre la classe RemoteServer de


java.rmi.server

RemoteServer est une classe abstraite

UnicastRemoteObject tend RemoteServer

- cest une classe concrte

- une instance de cette classe rside sur un serveur


et est disponible via le protocole TCP/IP

31 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Implmentation de lobjet distribu
import java.rmi.*;
import java.rmi.server.*;
public class Reverse extends UnicastRemoteObject implements
ReverseInterface
{
public Reverse() throws RemoteException {
super();
}
public String reverseString (String ChaineOrigine) throws
RemoteException {

int longueur=ChaineOrigine.length();
StringBuffer temp=new StringBuffer(longueur);
for (int i=longueur; i>0; i--)
{
temp.append(ChaineOrigine.substring(i-1, i));
}
return temp.toString();
} }

32 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le serveur

Programme lcoute des clients ;

Enregistre lobjet distribu dans rmiregistry


Naming.rebind("rmi://hote.cnam.fr:1099/MyReverse", rev);

On installe un gestionnaire de scurit si le serveur est amen


charger des classes (inutile si les classes ne sont pas charges
dynamiquement)
System.setSecurityManager(new RMISecurityManager());

33 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le serveur
import java.rmi.*;
import java.rmi.server.*;

public class ReverseServer {


public static void main(String[] args)
{
try {
System.out.println( "Serveur : Construction de limplmentation ");
Reverse rev= new Reverse();
System.out.println("Objet Reverse li dans le RMIregistry");
Naming.rebind("rmi://sinus.cnam.fr:1099/MyReverse", rev);
System.out.println("Attente des invocations des clients ");
}
catch (Exception e) {
System.out.println("Erreur de liaison de l'objet Reverse");
System.out.println(e.toString());
}
} // fin du main
} // fin de la classe

34 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le Client

Le client obtient un stub pour accder lobjet par une URL RMI
ReverseInterface ri = (ReverseInterface) Naming.lookup
("rmi://sinus.cnam.fr:1099/MyReverse");

Une URL RMI commence par rmi://, le nom de machine,


un numro de port optionnel et le nom de lobjet distant.

rmi://hote:2110/nomObjet

Par dfaut, le numro de port est 1099 dfini (ou dfinir) dans
/etc/services :

rmi 1099/tcp

35 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le Client
Installe un gestionnaire de scurit pour contrler les stubs
chargs dynamiquement :

System.setSecurityManager(new RMISecurityManager());

Obtient une rfrence dobjet distribu :


ReverseInterface ri = (ReverseInterface) Naming.lookup
("rmi://sinus.cnam.fr:1099/MyReverse");

Excute une mthode de lobjet :

String result = ri.reverseString ("Terre");

36 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le Client
import java.rmi.*;
import ReverseInterface;

public class ReverseClient


{
public static void main (String [] args)
{ System.setSecurityManager(new RMISecurityManager());
try{
ReverseInterface rev = (ReverseInterface) Naming.lookup
("rmi://sinus.cnam.fr:1099/MyReverse");
String result = rev.reverseString (args [0]);
System.out.println ("L'inverse de "+args[0]+" est "+result);
}
catch (Exception e)
{
System.out.println ("Erreur d'accs l'objet distant.");
System.out.println (e.toString());
}
}
}

37 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le Client

Pour que le client puisse se connecter rmiregistry, il faut lui


fournir un fichier de rgles de scurit client.policy.
$more client.policy
grant
{
permission java.net.SocketPermission
":1024-65535", "connect" ;
permission java.net.SocketPermission
":80", "connect";
};

$more client1.policy
grant
{
permission java.security.AllPermission;
};
38 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Compilation et Excution

- Compiler les sources (interface, implmentation de lobjet,


le serveur et le client ) :

sinus> javac *.java

- Lancer rmic sur la classe dimplmentation :

sinus>rmic -v1.2 Reverse


sinus>transfrer *Stub.class et ReverseInterface.class
vers la machine cosinus

- Dmarrer rmiregistry :

sinus>rmiregistry -J-Djava.security.policy=client1.policy&

39 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


- Lancer le serveur :
sinus>java ReverseServer &
Serveur :Construction de limplmentation
Objet Reverse li dans le RMIregistry
Attente des invocations des clients

- Excuter le client :
cosinus>java -Djava.security.policy=client1.policy ReverseClient
Alice

L'inverse de Alice est ecilA

40 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Rsum

Ct Client Ct Serveur

- linterface : ReverseInterface - linterface : ReverseInterface


- le stub : Reverse_Stub - lobjet : Reverse
- le client : ReverseClient - le serveur dobjets : ReverseServer

41 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Rfrences bibliographiques (RMI)

Java & Internet de Gilles Roussel et Etienne Duris, Ed Vuibert,


2000.

Mastering RMI, Rickard berg, Ed. Willey, 2001.

J2EE, Ed. Wrox, 2001.

Cours RMI, D. Olivier & S. Bouzefrane, DESS SOR, universit


du Havre, 2001/2002

Tutorial de Java RMI de Sun :


http://java.sun.com/docs/books/tutorial/rmi/index.html

42 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


La technologie .NET
et
le service .NET Remoting

43 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Quelques
Quelquesnotions
notionsde
debase
basede
de.NET
.NET

44 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les Frameworks .NET

2010

2007
Directement intgr
dans Windows Vista
et Windows Server 2008
2006

2005

http://fr.wikipedia.org/wiki/Fichier:DotNet_French.svg
45 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Nouvelles fonctionnalits depuis .NET 3.0

.NET 3.0
- Windows Presentation Foundation (WPF) : un nouveau sous-systme d'interface
utilisateur bas sur XML et le dessin vectoriel. WPF utilise les cartes graphiques
3D et Direct3D.
- Windows Communication Foundation (WCF) : systme de messagerie orient services
qui permet aux programmes de communiquer localement ou distance
(d'une faon analogue aux services web).
- Windows Workflow Foundation (WF) permet la construction de transactions
ou tches automatises (gestion des processus mtier)
- Windows CardSpace, anciennement InfoCard est un composant logiciel destin
mmoriser de faon scurise les informations numriques relatives une personne
et fournit une interface unifie pour le choix des identits pour une transaction particulire.

.NET 3.5
- Language Integrated Query (LINQ) permettant des requtes objet aussi bien sur des
Data, des Collections, du XML ou des DataSets.
- Ajax.Net avec de nouveaux protocoles (AJAX, JSON, REST, RSS, Atom) et
d'autres standards WS-*.

46 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les Frameworks .NET

http://download.microsoft.com/download/f/3/2/f32ff4c6-174f-4a2f-a58f-ed28437d7b1e/Introducing_NET_Framework_35_v1.doc.

47 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Plateforme indpendante des langages

http://fr.wikipedia.org/wiki/Fichier:Overview_of_the_Common_Language_Infrastructure.svg
48 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Architecture de .NET

CLS (Common Langage Specification)


C#, VB.NET, JScript, etc.

Bibliothques de classe de base


ADO.NET, Forms, XML, ASP.NET, etc. outils

Implmentation du CLI
(Common Language Infrastructure)
CLR (Common Language Runtime)

49 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Le CLR : moteur dexcution de .NET

CLR : Common Runtime Language


lment central de larchitecture .NET

Gre lexcution du code des applications

Les actions du CLR :


Hbergement de plusieurs applications dans un mme processus Windows

Compilation du code IL en code machine

Gestion des exceptions

Destruction des objets devenus inutiles

Chargement des assemblages

Rsolution des types

50 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Notion dassemblage

Assemblage = composant de la plate-forme .NET (quivalent au .exe


ou .dll sous Windows)

 Un assemblage = plusieurs fichiers appels Modules

 les fichiers dun mme assemblage doivent appartenir au mme rpertoire

 Un assemblage porte le nom dun module principal quil contient

 Le module principal joue un rle particulier car :


Tout assemblage en comporte un et un seul

 Si un assemblage comporte plusieurs modules alors le module principal


est charg en premier

Un module principal (.exe ou .dll), module non principal (.netmodule)

51 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Notion de module
Module principal

Entte Entte Code


Manifeste Mtadonnes Ressources
PE CLR Compil IL

PE: Portable Description


Rfrences
Executable des types
vers les autres
modules et ressources

Autre module
Entte Entte Code
Mtadonnes Ressources
PE CLR Compil IL

Version du CLR
52 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Domaine dapplication

 AppDomain : est lquivalent dun processus lger

 On associe un domaine par application

 Un processus Windows : est un ensemble de domaines dapplication

 La cration dun domaine consomme moins de ressources quavec


un processus Windows

Les domaines dapplication hbergs dans un mme processus Windows


partagent les ressources du processus (ex. CLR, les types de base de .NET,
lespace dadressage, les threads, etc.)

Ne pas confondre threads (units dexcution) avec domaines dapplication


(units disolation dexcution)

53 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Assemblage/Domaine dapplication

Lorsquun assemblage excutable est dmarr, le CLR cre automatiquement


un domaine par dfaut

 Un domaine dapplication a un nom (son nom par dfaut est celui


du module principal de lassemblage lanc)

 Un mme assemblage peut tre charg par plusieurs domaines

 Les domaines sont isols les uns des autres par le CLR

 Lassemblage mscorlib (types de base de .NET) est charg dans un processus


hors domaine dapplication

 Lisolation se fait au niveau des types, de la scurit et de la gestion dexceptions


(pas disolation au niveau des threads)

54 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


.NET
.NETRemoting
Remoting

55 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


.NET Remoting

permet la communication entre programmes (domaines dapplication)


qui peuvent se trouver physiquement sur la mme machine ou sur
deux machines distinctes.

56 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Prsentation/1

 .NET Remoting est un systme dobjets distribus

 .NET Remoting est une Application Programming Interface

57 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Prsentation/2

 Mcanisme qui permet lappel de mthodes entre objets


qui sexcutent ventuellement sur des machines distinctes ;

 L appel peut se faire sur la mme machine ou bien sur des machines
connectes sur un rseau ;

 Utilise les sockets ;

.NET Remoting repose sur les classes de srialisation.

58 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


.NET Remoting
 Peut tre vu comme le successeur de DCOM

 Est linfrastructure .NET qui permet des objets (appartenant des domaines
dapplications diffrents) de communiquer entre eux

 Lobjet appelant : client

 Lobjet appel : serveur

 Les domaines dapplication diffrents appartiennent :

 au mme processus Windows


 des processus diffrents sur la mme machine
 des processus diffrents sur deux machines diffrentes

 Les donnes changes sont emballes par des objets appels formateurs.

59 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Appel synchrone/asynchrone/1

Par dfaut, lappel entre le client et le serveur est synchrone (blocage du client
jusquau retour du rsultat de la mthode)

 Lappel asynchrone existe aussi : le client poursuit aprs lappel mais le serveur
peut avertir le client de lexcution de lappel

60 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Appel synchrone/asynchrone/2

Client Client
Serveur Serveur
appel appel

blocage

rponse rponse

Appel synchrone Appel asynchrone

61 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Lappel dune mthode

 Lappel dune mthode distance se fait selon deux solutions :

 Marshalling By Value (MBV)

 Marshalling By Reference (MBR)

62 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBR (Marshalling By Reference)

 Consiste obtenir un nouvel objet appel proxy transparent dans le domaine


dapplication du client

 Questions :

 Qui est responsable de la cration dobjets distants

 Comment rcupre-t-on un proxy transparent ?

 Comment la classe proxy fait-elle pour faire transiter les donnes sur
le rseau

63 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBR (Marshalling By Reference)

Domaine dapplication 1 Domaine dapplication 2

Assemblage 1 Assemblage 2

Client Proxy
vers CLR CLR Objet distant
lobjet

Faire driver une classe partir de MarshalByRefObject() indique au


compilateur JIT quune instance de cette classe peut tre utilise dune manire
distante grce un proxy transparent.
64 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Exemple de MBR/1 en local

using System;
using System.Runtime.Remoting.Contexts;
using System.Runtime.Remoting;
using System.Threading;

public class Foo : MarshalByRefObject {


public void AfficheInfo(string s) {
Console.WriteLine(s);
Console.WriteLine(" Nom du domaine: " +
AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine(" ThreadID : " +
Thread.CurrentThread.ManagedThreadId);
}
}

65 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple de MBR/2 en local

public class Program {


static void Main() {
// obj1
Foo obj1 = new Foo();
obj1.AfficheInfo("obj1:");
Console.WriteLine(" IsObjectOutOfAppDomain(obj1)=" +
RemotingServices.IsObjectOutOfAppDomain(obj1));
Console.WriteLine(" IsTransparentProxy(obj1)=" +
RemotingServices.IsTransparentProxy(obj1));

// obj2
AppDomain appDomain = AppDomain.CreateDomain("Autre domaine.");
Foo obj2 = (Foo)appDomain.CreateInstanceAndUnwrap(
"MBRTest", // Nom du projet sous Visual C# (nom asm)
"Foo"); // Nom du type.
obj2.AfficheInfo("obj2:"); // Ici, le code client ne sait pas
// qu'il manipule un proxy transparent.
Console.WriteLine(" IsObjectOutOfAppDomain(obj2)=" +
RemotingServices.IsObjectOutOfAppDomain(obj2));
Console.WriteLine(" IsTransparentProxy(obj2)=" +
RemotingServices.IsTransparentProxy(obj2));
}}
66 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
Exemple de MBR/3 en local
Processus

Domaine dapplication par dfaut


Assemblage MBRTest

contexte
Client Obj1

Obj1.AfficheInfo();

Thread / ThreadID=6116
Obj2.AfficheInfo(); Proxy vers Obj2

Second domaine dapplication


Assemblage MBRTest

contexte
Obj2

67 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Excution

Compilation:
csc.exe /out:MBRTest.exe /target:exe MBRTest.cs

Obj1:
Nom du domaine: MBRTest.exe
ThreadID : 6116
IsObjectOutOutOfAppDomain(obj1)=False
IsTransparentProxy(obj1)=False

Obj2:
Nom du domaine: MBRTest.exe
ThreadID : 6116
IsObjectOutOutOfAppDomain(obj2)=True
IsTransparentProxy(obj2)=True

68 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Srialisation/ Dsrialisation

 Un objet est srialisable si :

 Sa classe possde lattribut System.Serializable signal au CLR ou

 Sa classe implmente linterface


System.Runtime.Serialization.IsSerializable pour implmenter
son propre mcanisme de srialisation

69 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBV ( Marshalling By Value)/1

 Consiste fabriquer un clone de lobjet distant dans le mme domaine que


le client

 Le CLR fait en sorte que lobjet clon ait le mme tat (mme valeurs des champs)
que lobjet distant

 Le client na pas besoin de proxy transparent pour accder lobjet

 Le domaine du client doit pouvoir charger lassemblage qui contient la classe


de lobjet distant original

 Lobjet original ne doit pas contenir des rfrences des objets non clonables

 Cest le CLR qui envoie ltat de lobjet distant dans un stream binaire au
domaine dapplication du client : on parle de srialisation

 Le CLR dsrialise le stream binaire et reconstitue ltat dans le clone

70 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBV ( Marshalling By Value)/2

Domaine dapplication 1 Domaine dapplication 2

Assemblage 1 Assemblage 2

Client Clone
de CLR CLR Objet distant
lobjet

Aprs clonage dans le domaine du client, les tats du clone et de lobjet distant
sont indpendants

71 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBV ( Marshalling By Value)/3
Domaine dapplication contenant
Domaine dapplication du client
lobjet distant original

Client

Obj1.Champs1=200;

Objet distant original


Clone de lobjet distant
Champs1 : 123
Champs1 : 200
Champs2 : 456
Champs2 : 456

72 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


MBV / MBR et le passage darguments

 MBV : similaire au passage de paramtres par valeur


 MBR : similaire au passage de paramtres par rfrence

MBR= accs lobjet distant = modifications


adresse visibles

valeur MBV= clonage = modifications


locales au clone

Mthode (adresse) { Mthode (valeur) {


V=valeur;

} }

Passage par rfrence Passage par valeur

73 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple avec MBV/1

[Serializable]
public class Foo { // : MarshalByRefObject <- en commentaire
public void AfficheInfo(string s) {
Console.WriteLine(s);
Console.WriteLine(" Nom du domaine: " +
AppDomain.CurrentDomain.FriendlyName);
Console.WriteLine(" ThreadID : " +
AppDomain.GetCurrentThreadId());
}
}

74 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Excution

Compilation:
csc.exe /out:MBVTest.exe /target:exe MBVTest.cs

Obj1:
Nom du domaine: MBVTest.exe
ThreadID : 3620
IsObjectOutOutOfAppDomain(obj1)=False
IsTransparentProxy(obj1)=False

Obj2:
Nom du domaine: MBVTest.exe
ThreadID : 3620
IsObjectOutOutOfAppDomain(obj2)=False
IsTransparentProxy(obj2)=False

75 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


La classe ObjectHandle : autre manire de crer un objet

Deux manires de crer un objet distant :


 laide de CreateInstanceAndUnwrap() (voir exemple MBR)

 laide de deux oprations :

ObjectHandle() reprsente lobjet distant cr

Unwrap() qui permet de crer un proxy transparent si lobjet distant


est MBR ou bien de crer un clone de lobjet si celui-ci est MBV.

ObjectHandle hObj = appDomain.CreateInstance("WrapTest","Foo");


Foo obj = (Foo) hObj.Unwrap();

Nom du domaine

76 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Architecture distribue avec objets serveurs MBR

Il existe 4 entits :

Les clients qui appellent les objets serveurs

Les htes qui hbergent les objets serveurs

Les mtadonnes des types des objets serveurs

Les implmentations des objets serveurs

Recommandation : isoler chaque entit dans un assemblage

77 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


lments de larchitecture distribue

Domaine dapplication Client Domaine dapplication Serveur

Assemblage contenant Assemblage contenant


le code du client le code du serveur

Assemblage(s) contenant Assemblage(s) contenant


les mtadonnes des les implmentations des objets
types des objets serveurs serveurs et des types des objets
serveurs

78 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Responsabilit dun hte

Un hte doit :


 crer un ou plusieurs canaux (channels)
 exposer des classes ou des objets serveurs accessibles par des clients
travers dURIs
 maintenir le processus qui contient les objets serveurs.

 Un objet est expos si le client doit connatre lobjet utiliser

79 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Les canaux

Un canal est un objet qui permet de communiquer via le rseau ou bien
entre processus locaux (IPC)

 Un canal est caractris par trois paramtres :

 le port rseau de la machine qui lutilise


 le protocole de communication utilis (TCP, HTTP, IPC)
 le type de formatage de donnes (format binaire, SOAP, XML propritaire)

 Par dfaut, le formatage binaire est associ au protocole TCP et IPC

 Par dfaut, le formatage SOAP est associ au protocole HTTP

 .NET Remoting utilise deux canaux utilisant le mme formatage et le mme


protocole (un canal ct client et un canal ct serveur).

80 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Activation dobjets

En .NET Remoting, on parle plutt dactivation dobjets que de cration


dobjets car la cration gnre lactivation de plusieurs actions avant
la disponibilit effective de lobjet

 A la spcification de larchitecture, il est important de dfinir qui


(client ou hte) va activer chaque objet distant

81 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Service dactivation par le serveur (WKO)

 Lobjet WKO (Well known Object) est accessible distance

 Si lobjet est activ par le serveur alors :


Le client nappelle pas le constructeur de la classe
Le client ne connat pas la classe de lobjet
 Le client connat les interfaces supportes par la classe de lobjet
 Ces interfaces figurent dans lassemblage des mtadonnes
des types des objets serveurs

Lassemblage qui contient les interfaces est prsent dans le domaine du client
et dans celui du serveur

82 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


tapes de dveloppement de lapplication

criture de la classe dinterface

criture du serveur

criture du client

83 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


tapes de dveloppement du serveur

 Implmentation de linterface (classe de lobjet serveur)

 Cration dun canal (n de port, TCP), formatage binaire par dfaut

 Enregistrement du canal auprs du domaine dapplication courant

 Publication de lobjet

84 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple (Interface)

Compilation:
csc.exe /out:Interface.dll /target:library NommageInterface.cs

namespace NommageInterface {
public interface IAdditionneur {
double Add(double d1, double d2);
}
}

85 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple (Implmentation)
Compilation:
csc.exe /out:Serveur.exe /target:exe NommageServer.cs /r:Interface.dll

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using NommageInterface;

namespace NommageServer {
public class CAdditionneur : MarshalByRefObject, IAdditionneur {
public CAdditionneur() {
Console.WriteLine("CAdditionneur ctor");
}
public double Add(double d1, double d2) {
Console.WriteLine("CAdditionneur Add( {0} + {1} )", d1, d2);
return d1 + d2;
}
}

86 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple (Hte)
class Program {
static void Main() {
// 1)Creation d'un canal Tcp sur le port 65100
//enregistre ce canal dans le domaine d'application courant.
TcpChannel canal = new TcpChannel(65100);
ChannelServices.RegisterChannel(canal, false);

// 2) Ce domaine d'application presente un objet de type


// IAdditionneur associe au point terminal 'ServiceAjout'.
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(NommageServer.CAdditionneur),
"ServiceAjout",
WellKnownObjectMode.SingleCall);

// 3) Maintien du processus courant.


Console.WriteLine(
"Pressez une touche pour stopper le serveur.");
Console.Read();
}
}
}
87 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -
tapes de dveloppement du client

 Cration du canal

 Construire lURI (ex: tcp://localhost:65100/ServiceAjout)

 Rcupration du proxy transparent de lobjet distant

 Appel de la mthode distante


Appel Single Call : associe un appel un objet, do n appels correspondent
n objets serveurs

Appel Singleton : associe plusieurs appels au mme objet (gestion daccs


aux ressources communes)

88 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple de client/1
Compilation:
csc.exe /out:Client.exe /target:exe NommageClient.cs /r:Interface.dll

using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;

using NommageInterface;

namespace NommageClient {
class Program {
static void Main() {
// Cre un canal TCP puis enregistre
// ce canal dans le domaine d'application courant.
// (la valeur 0 pour le numro de port ct client signifie
// que ce numro de port est choisi automatiquement
// par le CLR).

89 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Exemple de client/2

TcpChannel canal = new TcpChannel(0);


ChannelServices.RegisterChannel(canal, false);

// Obtient un proxy transparent sur l'objet distant partir de


// son URI, puis transtype le proxy distant en IAdditionneur.
MarshalByRefObject objRef = (MarshalByRefObject)
RemotingServices.Connect(
typeof(NommageInterface.IAdditionneur),
"tcp://localhost:65100/ServiceAjout");
IAdditionneur obj = objRef as IAdditionneur;

// Appel d'une methode sur l'objet distant.


double d = obj.Add(3.0, 4.0);
Console.WriteLine("Valeur retournee:" + d);
}
}
}

90 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Excution

Chaque ligne correspond un assemblage

csc.exe /target:library NommageInterface.cs


csc.exe NommageServer.cs /r:library
csc.exe NommageClient.cs /r:library

Affichage du Serveur
Pressez une touche pour stopper le serveur.
CAdditionneur ctor
CAdditionneur Add( 3 + 4)

Affichage du Client.exe
Valeur retournee:7

>>> Sous Visual Studio Express 2008, il faut rajouter une rfrence
vers le namespace System.Runtime.Remoting qui contient les classes
des canaux.

91 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Excution en mode Single Call

Hte :
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(CAdditionneur),
"ServiceAjout",
WellKnownObjectMode.SingleCall);

Client:
Obj1.Add(3.0 , 4.0);
Obj1.Add(5.0 , 6.0);

Serveur :
Pressez une touche pour stopper le serveur.
CAdditionneur ctor
CAdditionneur Add( 3 + 4)
CAdditionneur ctor
CAdditionneur Add( 5 + 6)

92 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Excution en mode Singleton

Hte :
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(CAdditionneur),
"ServiceAjout",
WellKnownObjectMode.Singleton);

Client:
Obj1.Add(3.0 , 4.0);
Obj1.Add(5.0 , 6.0);

Serveur :
Pressez une touche pour stopper le serveur.
CAdditionneur ctor
CAdditionneur Add( 3 + 4)
CAdditionneur Add( 5 + 6)

93 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Autre implmentation : Configuration dune application

 Ne pas figer les URIs dans le code

 Paramtres modifiables ct hte et ct client

 Paramtres stocks dans un fichier XML

94 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Configuration dun hte

 Publier CAdditionneur en WKO, mode singleton

 Publier CMultiplicateur en mode simple appel

95 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Configuration du serveur

Fichier Hote.config
<configuration>
<system.runtime.remoting>
<application name = "Serveur">
<service>
<wellknown type="NommageObjServeur.CAdditionneur,ObjServeur"
mode ="Singleton" objectUri="Service1.rem" />
<wellknown type="NommageObjServeur.CMultiplicateur,ObjServeur"
mode ="SingleCall" objectUri="Service2.rem" />
</service>
<channels>
<channel port="65100" ref="tcp" />
</channels>
</application>
</system.runtime.remoting>
</configuration>

Nom du fichier Serveur


Nom de la classe

96 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Dans le corps du serveur

Fichier Serveur.cs
...
class Program {
static void Main() {
RemotingConfiguration.Configure("Hote.config", false);
Console.WriteLine(
"Pressez une touche pour stopper le serveur.");
Console.Read();
}
}
...

97 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Configuration du client/1

Fichier Client.config
<configuration>
<system.runtime.remoting>
<application name = "Client">
<client>
<wellknown
type="NommageObjServeur.CAdditionneur,ObjServeur"
url="tcp://localhost:65100/Service1.rem" />
<wellknown
type="NommageObjServeur.CMultiplicateur,ObjServeur"
url="http://localhost:65100/Service2.rem" />
</client>
</application>
</system.runtime.remoting>
</configuration>

98 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Configuration du client/2
Fichier Client.cs
Compilation:
csc.exe /out:Client.exe /target:exe Client.cs /r:ObjServeur.dll
...
using System.Runtime.Remoting.Activation;
using NommageObjServeur;

namespace NommageClient {
class Program {
static void Main() {
RemotingConfiguration.Configure("Client.config", false);
CAdditionneur objA = new CAdditionneur();
...
}
}

Lappel au constructeur permet de rcuprer une rfrence vers le proxy transparent

99 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -


Bibliographie

Les exemples de programmes prsents dans ce cours ont t repris du


livre Pratique de .NET2 et C#2, Patrick Smacchia, Ed. Oreilly, 2005.

//ditch.developpez.com/ par Didier Danse


msdn.microsoft.com
Apprentissage du Langage C#, par Serge Tah, ISTIA, Universit dAngers
 Crer et Consommer un service web avec .NET , Par Stphane
Eyskens.
Visual Studio 2008 (versions Express gratuites)
http://www.microsoft.com/express/

100 samia.bouzefrane@cnam.fr - CEDRIC ( CNAM) -