IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

OperationContext.Current dans un environnement multithread


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Par défaut OperationContext.Current dans un environnement multithread
    Bonjour,

    J'ai un service WCF sur lequel se connectent plusieurs clients.
    Le service est configuré ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ServiceBehavior(
            InstanceContextMode = InstanceContextMode.Single,
            UseSynchronizationContext = false,
            ...
    dans le service j'utilise OperationContext.Current.SessionId pour identifier les client qui se connectent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void Register()
    {
            Debug.WriteLine(OperationContext.Current.SessionId);
    }
    Imaginons le scénario suivant :
    - Client1 appelle Register
    - Le service exécute Register dans Thread1
    - Apres un certain moment Client2 appelle Register
    - Le service exécute Register aussi dans Thread1 (ce qui est théoriquement possible, non ??)

    Sachant que OperationContext est ThreadStatic est ce que le deuxième appel affiche bien la deuxième session ou est ce qu'il récupère la valeur déjà alimenté par le premier appel puisqu'il s'agit du même thread ?


    Merci d'avance...

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2004
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2004
    Messages : 145
    Par défaut
    You will get Session2. Session and Instantiation are 2 different things in WCF. I would recommend you read the following 2 blog entries that will help you understand the concepts of WCF sessions and instantiation.

    http://www.dotnetconsult.co.uk/weblo...1363fa51e.aspx

    http://www.dotnetconsult.co.uk/weblo...0d6347914.aspx

    you can also test this with a client. I changed your WCF method to return the sessionID and consumed it in the client.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static void Main(string[] args)
    {
          ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
          Console.WriteLine(client.Regster());
          Console.ReadLine();
          client.Close();
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SQL Server dans un environnement CITRIX
    Par captainamerica75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/02/2006, 14h36
  2. [VB6] Command dans Data Environnement
    Par damned3 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/09/2005, 10h39
  3. Réponses: 9
    Dernier message: 16/05/2005, 18h43
  4. Serveur Linux dans un environnement Windows
    Par Loth dans le forum Réseau
    Réponses: 6
    Dernier message: 29/05/2004, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo