Articles / Nouvelle technologies


Dans un projet que j'ai réalisé il y a pas longtemps, j'ai du intégrer le concept de session dans Windows Communication Foundation (WCF). Vous allez voir, c'est un vrai jeu d'enfant!

Tout se passe dans l'interface qui définit notre contrat (ou presque). Au départ, nous avons ceci comme contrat :

[code:c#]
public interface ICareOfUServices
{
    bool Login(string Login, string Password); 
    void AjoutSinistre(int GestionnaireID, int EtatSinitreID, int NumeroProcesVerbal, string Intitule, string Temoin,
        string Lieu, string Commentaire, int Imobilise);
}
[/code]

Nous avons ici deux méthodes :

  • Login : qui permettra l'authentification.
  • AjoutSinistre : qui pourra être appellé seulement si on est authentifier.

Pour utiliser les sessions, nous devons les définir dans l'interface à l'aide d'attribut. Notre interface devient :

[code:c#]
[ServiceContract(SessionMode=SessionMode.Required)]
public interface ICareOfUServices
{
    [OperationContract(IsInitiating=true, IsOneWay=false)]
    bool Login(string Login, string Password);

    [OperationContract(IsOneWay=true)]
    void AjoutSinitre(int GestionnaireID, int EtatSinitreID, int NumeroProcesVerbal, string Intitule, string Temoin,
        string Lieu, string Commentaire, int Imobilise);
}
[/code]

On voit différents éléments :

  • SessionMode : Permet de dire qu'on à besoin absolument d'une session.
    On peut avoir d'autre mode de session :
    image
  • IsInitiating : permet d'indiquer où est initialisée la session. Par opposition, on peut aussi trouver IsTerminating= qui permet d'indiquer où la session se termine.
  • IsOneWay : permet d'indiquer si on envoi une réponse ou non.

Dans la classe qui implémente l'interface, nous avons besoin d'ajouter un attribut :

[code:c#]
[ServiceBehaviorAttribute(InstanceContextMode = InstanceContextMode.PerSession)]
public class CareOfUServices : ICareOfUServices
{
    #region ICareOfUServices Members 
    bool IsConnected = false;
    ...
[/code]

Ce qui veut dire qu'on instancie cette objet à chaque session. La session, c'est donc l'objet lui même. On voit un peu plus bas que j'ai mis un booléan à false que je mettrai à true si le consommateur du web service est bien connecté. Ensuite, dans mes autres méthodes je mettrai :

[code:c#]
if( IsConnected == true)
    // OK...
[/code]

Et voilà :)



Lire la suite...
Tags: ,
Catégorie : Windows Comunication Foundation

Une question sur cet article? n'hésitez pas a me contacter par Live Messegner. Suis-je connecté?

Actuellement noté 4.0 par 1 personne(s)

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Par Loïc Bar le 04/02/2008 15:02:43

Permalink | Commentaires (3) | Post RSS |


Commentaires

04/02/2008 21:27:37

Arnaud

Merci de partager cet exemple. Mais sais-tu comment on peut accéder à la liste des instances en cours? En effet, on a une instance par client grâce au mode PerSession, mais comment faire si je veux accéder à la liste des instances pour gestion?

Arnaud fr

05/02/2008 10:58:31

loicbar

Salut Arnaud, personellement, je programmerais un objet conteneur des sessions.

Je me renseigne sur le sujet Smile

loicbar be

07/02/2008 12:03:32

Loic Bar

Hi! Smile. On pourrai placé une variable dictionnaire static dans notre webservice pour stocker les objets instance Smile

Loic Bar be

Ajouter un commentaire



(Affichera votre icône Gravatar)  

  Country flag










Propulsé par BlogEngine.NET, modifé par Loïc Bar.