Bonjour,

voilà ma question, j'ai un service WCF avec : InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple

Dans mes méthodes, j'ai une classe "Context" qui contient l'utilisateur actuel, le logger... Donc j'instancie cette classe à chaque "appelle" de mon WCF :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
public class WcfInstanceContext : IExtension<OperationContext>
    {
        private readonly IDictionary<string, object> items;
 
        private WcfInstanceContext()
        {
            items = new Dictionary<string, object>();
        }
 
        public IDictionary<string, object> Items
        {
            get { return items; }
        }
 
        public static WcfInstanceContext Current
        {
            get
            {
                WcfInstanceContext context = OperationContext.Current.Extensions.Find<WcfInstanceContext>();
                if (context == null)
                {
                    context = new WcfInstanceContext();
                    OperationContext.Current.Extensions.Add(context);
                }
                return context;
            }
        }
 
        public void Attach(OperationContext owner) { }
        public void Detach(OperationContext owner) { }
    }
Après j'utilise par exemple : WcfInstanceContext.Current.Items["CurrentUser"] pour récupérer l'utilisateur.

Là ca marche très bien, s'il y a 5 utilisateurs en même temps, chaque "session" a bien son "CurrentUser".

Maintenant dans mon service, j'ai un traitement et j'essaie de le fait avec Parallel.ForEach :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
Parallel.Foreach(list, l => 
{
    User currentUser = WcfInstanceContext.Current.Items["CurrentUser"];
 
// ... autres traitements dans d'autres fonctions qui récupèrent aussi l'utilisateur actuel...
 
});
Sauf que là mon "WcfInstanceContext.Current" est null...

Donc j'aimerai une espèce de "classe static" instancié à chaque nouvel appel (nouvelle session) de mon WebService mais que dans la session, elle soit accessible partout y compris dans les différents threads...

Que dois je faire ?

Merci