Le serveur ne peut pas modifier les cookies après les en-têtes HTTP ont été envoyés
Je suis entrain de créer une application web en C#.
Quand mon chargement de la page j'ai le feu à un thread asynchrone pour le traitement de certaines données. Le cadre de ce traitement est la mise à jour d'un cookie. Cependant lorsque je l'ai enregistrer le cookie à la réponse
System.Web.HttpContext.Current.Response.Cookies.Add(cookie)
, J'obtiens l'exception suivante:
HttpException: Server cannot modify cookies after HTTP headers have been sent.
Toute façon, je peux contourner ou résoudre ce problème?
OriginalL'auteur amateur | 2011-03-31
Vous devez vous connecter pour publier un commentaire.
Sauf si vous avez une très bonne raison, vous ne devriez pas être en rotation arrière-plan de threads de travail dans un ASP.NET demande. En fin de compte, vous devez encore attendre pour ce thread pour terminer son travail avant de vous envoyer la réponse au navigateur.
Ça sonne comme du flux de la réponse a déjà été partiellement écrit à et puis votre fil est d'essayer d'ajouter le cookie.
J'avais repenser votre stratégie ici et lisez les directives suivantes:
Il ressemble à un document daté, mais les principes sont encore debout. Si la raison de votre appel au processeur de données est d'empêcher l'ASP.NET thread de travail à partir de blocage de l'utilisation des ressources, car le processeur de données est en cours d'exécution longue, puis envisager de mettre à la page un Asynchrone page à la place.
oui c'est possible, mais sans voir exactement comment vous êtes structurer le code, je ne voudrais pas spéculer où.
voir ma mise à jour.
OriginalL'auteur Kev
Oui, les Cookies sont une partie de la réponse http et dans une opération asynchrone vous ne pouvez pas changer quoi que ce soit après une réponse est générée et envoyée au navigateur.
Pour contourner cela, je recommande de construire un ajax boucle sur le navigateur pour obtenir async résultat de l'opération. Une fois cette opération terminée, vous pouvez retourner un cookie avec l'ajax réponse.
OriginalL'auteur ertan
Ce que si c'est dans preinit ou init? vous ne savez pas si cela va aider à bien.
http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events
OriginalL'auteur m4tt1mus