cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015
-
12 juin 2008 à 17:47
cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015
-
13 juin 2008 à 17:32
Bonjour,
J'ai besoin dans une application ASP.NET en C# d'exécuter un processus assez...très lourd.
Je me suis donc dit qu'il serait interessant de créer un thread qui execute ma fonction.
Seulement, j'ai un petit problème : quand ma page a été intégralement renvoyée au client, l'objet session du contexte disparait. Et évidement... j'en ai besoin.
Quelqu'un saurait-il comment conserver cet objet pendant l'éxecution du traitement ?
Console.Out.WriteLine("Warny")
Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015 13 juin 2008 à 09:14
Salut,
J'y ai pensé (et ça marche), mais le problème c'est que j'appelle des bibliothèques externes qui nécessitent l'emploi du context et je ne peux pas leur passer l'objet session.
Console.Out.WriteLine("Warny")
Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 13 juin 2008 à 09:43
HttpContext.Current possède un setter, tu peux essayer de le définir dans ton thread ... je ne l'ai jamais utilisé donc je ne sais pas quelle comportement cela peut avoir.
cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015 13 juin 2008 à 09:50
Re (et merci de répondre),
J'ai utilisé le setter (qui fonctionne) : dans un thread le context est perdu, je lui redonne donc à manger le context de la page. C'est là qu'arrive mon problème : dès que la page est finie d'envoyer au client, le context perd l'objet session, celui-ci ne dispose pas de setter et en fait je ne maitrise absolument pas le moment où il est perdu.
Console.Out.WriteLine("Warny")
Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres
Vous n’avez pas trouvé la réponse que vous recherchez ?
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 13 juin 2008 à 10:51
Ca ne m'étonne pas tellement, à mon avis une fois que la requete est terminé le HttpContext est disposed, ce qui est tout à fait logique, du coup la session & co devient null.
Si tu es courageux regarde dans Reflector où cela peut se passer (je viens de regarder rapidement et je pense que c'est autour de la méthode PipelineRuntime.DisposeHandlerPrivate), cela ne t'avancera surement à rien mis à part comprendre pourquoi cela ne fonctionne pas.
C'est un sujet que je ne connais pas très bien, mais il doit y avoir moyen d'avoir son propre contexte au niveau du thread (peut être en utilisant l'attribut ThreadStaticAttribute mais il doit y avoir plus propre).
Le plus simple pour moi est de se passer de la session, explique nous pourquoi tu en as besoin, on trouvera peut être une solution alternative.
cs_Warny
Messages postés473Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention10 juin 2015 13 juin 2008 à 17:32
Re,
Donc j'ai regardé, il n'y a pas de dispose dans le context ou la session. Il semble que le contexte soit abonné à un évènement qui indique quand la réponse a été intégralement envoyé au client mais je n'ai pas encore trouvé où.
Je continue à chercher.
Console.Out.WriteLine("Warny")
Il y a 10 types de personnes
Ceux qui comptent en binaire... et les autres