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 :
Après j'utilise par exemple : WcfInstanceContext.Current.Items["CurrentUser"] pour récupérer l'utilisateur.
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) { } }
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 :
Sauf que là mon "WcfInstanceContext.Current" est null...
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... });
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
Partager