Chinese (People's Republic of China)  English  Français


Supinfo-Projects.com
Tous les projets des élèves ingénieurs de Supinfo



Projets
  Dernier Projet
  Les plus populaires
  Tous les Projets

179 Visiteurs
3168 Projets


My Supinfo-Projects

   Connectez-vous
   Créez un Compte


Synopsis

   91 Visites
   Note INTERNET : 19.6
    (6 Votants)
   0 Commentaires

   Lire l'article

Evaluez cet article

20
18
16
14
12
10
8
6
4
2
0


Commentez cet article

Auteur :

Email :

Votre commentaire :



 
2006 - Note de Synthèse Stage
.NET 3.0 : Présentation du Windows Communication Foundation (WCF)
[40 mn de lecture - paru le 11/5/2006 6:45:43 PM - Public : Confirmé]

Auteur

sebeuhSébastien WARIN
Elève-Ingénieur Supinfo Nord-Pas De Calais
Promotion SUPINFO 2010

   Lui écrire
   Tous les projets de cet auteur
   Le mini-CV de cet auteur

3 Développer avec WCF

   
    Pour développer une application communicante avec un service et des clients, nous allons devoir développer 3 parties :
  • le Service
  • l' Host qui hébergera le service pour l'exposer en local ou à distance
  • les Clients qui consommeront le service

    3.1 Création du service

    La 1er chose à faire comme dit dans l'introduction, sera de créer classe service qui définira les objets communs échangés (DataContract), la liste des opérations (ServiceContract) ainsi que la classe métier de notre service qui implémentera notre contrat. Notre service se résume donc à une bibliothèque de classe (une simple DLL: assembly .net) faisant référence à System.ServiceModel.

        3.1.1 Définition des DataContract

    Le DataContract définit le format des données qui sera échangé entre le client et le service. Cela peut être une structure ou classe marquée de l'attribut DataContract où les membres seront marqués de l'attribut DataMember.

    Exemple:

[DataContract]
public struct Personne
{
    string m_Nom;
    string m_Prenom;


    [DataMember]
    public string Nom
    {
        get { return m_Nom; }
        set { m_Nom = value; }
    }
    [DataMember]
    public string Prenom
    {
        get { return m_Prenom; }
        set { m_Prenom = value; }
    }
}


    Dans notre exemple, nous définissions la structure Personne qui contient deux membres en String : Nom et Prenom. Cette structure pourra être utilisée comme format de données dans notre communication.
    Attention, n'oubliez pas de faire un using sur le namespace  System.Runtime.Serialization

        3.1.2 Création de l'interface ServiceContract

    Une fois les formats de données (objets communs) définis, nous allons pouvoir écrire l'interface qui sera marqué de l'attribut ServiceContract qui énumèrera la liste des méthodes de notre service. Chaque méthode sera marquée de l'attribut OperationContract.

   
L'exemple le plus simple est un service de calculette. Ce service exposera les méthodes Addition et Soustraction (pour faire court) à deux opérandes sur des floats.

    Exemple:

[ServiceContract()]
public interface IMaCalculette
{
    [OperationContract]
    float Addition(float a, float b);
    [OperationContract]
    float Soustraction(float a, float b);
}


    De cette façon, nous aurons un service qui exposera ces deux méthodes.

    3.1.3 Développement de la logique métier du service

    Enfin, après avoir définit les objets communs et la liste des opérations, nous devons maintenant développer la logique métier de notre service, ce qui se résume à implémenter notre interface ServiceContract.

   
Pour reprendre l'exemple du service de calculette, la classe service ressemblerai à  :

public class MaCalculette : IMaCalculette
{
    public float Addition(float a, float b)
    {
        return a + b;
    }
    public float Soustraction(float a, float b)
    {
        return a - b;
    }
}


    Après cela, il ne vous reste plus qu'à compiler et votre classe service sera prête. Ensuite il faudra héberger votre service pour l'exposer grâce à une application Host.

    3.2 Création de l'host (partie serveur)

    Nous avons deux possibilités d'héberger notre service :
  • Soit par Windows Activation Service (WAS) qui permet d'héberger des services WCF un peu comme IIS le fait avec les Webservices ASMX
  • Soit par un processus arbitraire que nous développerons (programme console, application ou service Windows, etc..)
    Ici nous ne présenterons pas le WAS. Nous développerons une application Console pour héberger notre classe service.

        3.2.1 Développement de classe Host

    Dans un projet de type console, la première chose à faire sera de rajouter la référence du System.ServiceModel ainsi que celle de notre classe service (dans notre exemple nommé MaCalculette).

    Ensuite, dans le Main de votre application, il faudra créer une instance de la classe ServiceHost :

ServiceHost maHost = new ServiceHost(typeof(MaCalculette));

maHost.Open()

// ... ...

maHost.Close();


    De cette façon, nous avons créé maHost qui héberge et expose le service MaCalculette.

   
Seulement voilà, à ce stade nous avons juste spécifié le contrat dans notre code, mais il nous manque le A et le B : l'adresse et le binding.

        3.2.2 Définition de l'Address et Binding  dans l'App.config

    Avec WCF ce n'est plus au développeur de configurer les adresses et le binding. Tout cela est configuré très simplement dans le fichier de configuration de l'Host par l'administrateur réseau par exemple.

    Chaque service peut disposer d'un ou plusieurs EndPoint.
   
    Ici pour notre service MaCalculette nous utilisons 2 EndPoint :
  • un utilisant le binding standard wsHttpBinding (qui n'est ni plus ni moins que l'équivalent des Webservices ASMX) sur l'adresse http://localhost:8001/MaCalculette
  • un autre utilisant le binding standard netTcpBinding (qui protocole TCP) sur localhost port 8002 (adresse URI : net.tcp://localhost:8002/)
  Voici notre fichier de configuration App.config de notre host :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="MaCalculetteNS.MaCalculette">
                <endpoint
            contract="MaCalculetteNS.IMaCalculette"
            binding="wsHttpBinding"
            address="http://localhost:8001/MaCalculette" />
                <endpoint
            contract="MaCaluletteNS.IMaCalculette"
            binding="netTcpBinding"
            address="net.tcp://localhost:8002" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

    Vous remarquez bien que l'on retrouve dans notre fichier de configuration le trio ABC dans un EndPoint.

        3.2.3 Démarrage du service

    Afin de compiler je vous propose d'ajouter le petit bout de code suivant :

foreach(ServiceEndpoint ep in maHost.Description.Endpoints)
{
    Console.WriteLine("Contract: {0}\n\tAddress: {1}\n\tBinding: {2}", ep.Contract.Name, ep.Address.ToString(), ep.Binding);
}

    Cette petite boucle vous listera les EndPoints de votre Host en indiquant leur A.B.C.

    Enfin exécutez votre Host et votre service sera exposé aux EndPoint définies. Il ne vous reste plus qu'a le consommer par des clients.
 

    3.3 Création du client

    Le client peut être tout type d'application .NET comme une application Winform, console ou Webform, etc...
    Il suffira juste d'ajouter la référence du service puis d'utiliser le service comme une simple classe .NET tout comme nous ne le faisons avec les web services ASMX.

        3.3.1 Ajouter la référence du service  

    Un simple clic-droit sur votre projet client et cliquez sur "Add Service Reference" :

miniaddservice.png   

    Puis donnez l'URI de votre service (dans notre exemple : http://localhost:8001/MaCalculette ou net.tcp://localhost:8002/) ainsi qu'un nom :

addservice2.png

    Visual Studio créera automatiquement les fichiers de référence du service (Contract) ainsi que le fichier App.config entièrement configuré (Binding, Address).

    Nous pourrons alors modifier très facilement le fichier app.config pour changer la manière dont se connecte notre client en modifiant l'address et le binding du EndPoint pour le service MaCalculette.

        3.3.2 Consommer le service WCF

    Visual Studio vous ayant maché tout le travail lors de l'ajout de la référence du service, il vous reste plus qu'à instancier votre classe 'ServiceClient' généré par VS puis de l'ouvrir par la méthode Open(). Ensuite vous pourrez appeler les méthodes de votre contrat qui seront exécutées sur le serveur par votre classe Service (ici MaCalculette).

    Exemple:

MaCalculetteClient m_service = new MaCalculetteClient();
m_service.Open();

float test = m_service.Addition(1.0f, 2.0f);

m_service.Close();



Articles de la même catégorie

 Pages : Top


27 Visites
0 Commentaires
Backoffice sécurisée en PHP
[30 mn de lecture - paru le 11/5/2006 6:13:45 PM - Public : Confirmé]

En savoir plus


18 Visites
0 Commentaires
8 days - Jeu Flash et PHP
[10 mn de lecture - paru le 11/5/2006 6:09:24 PM - Public : Débutant]

En savoir plus


7 Visites
0 Commentaires
Build Excel documents with XSLT
[20 mn de lecture - paru le 11/5/2006 5:54:29 PM - Public : Confirmé]

En savoir plus

   Tous les Articles


SUPINFO Training Center peut vous proposer une formation ...

   Devenez Ingénieur Système Microsoft en 35 jours avec SUPINFO Training Center
   Devenez Certifiés Cisco en 13 jours avec SUPINFO Training Center
   Devenez Administrateur Système Microsoft avec SUPINFO Training Center
   Devenez Développeur Microsoft .NET en 13 jours avec SUPINFO Training Center



Powered by Campus-Booster Technology
Conditions d'utilisation & Copyright | Respect de la vie privée
© Copyright 1965-2006 Supinfo Paris, Paris Academy of Computer Science
Supinfo, Ecole Supérieure d'Informatique et Paris Academy Of Computer Science are trade marks.
23, rue de Château LANDON - 75010 PARIS - Phone : +33 (0) 153359 700 Fax : +33 (0) 153359 701

Web site autided by :