WCF InstanceContextMode.PerSession et TPL
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:
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:
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