2009-07-22 6 views
0

Je reçois un intermittent "System.Web.HttpException: la requête a expiré." erreur lorsque mon code frappe la response.write ligne():"System.Web.HttpException: délai d'attente de la demande." erreurs sur Response.write

sMessage = "Searching...0% complete."<br> 
sSetVal = "&lt;script>document.getElementById('MessageDiv').innerHTML='" & sMessage & "';&lt;/script>"<br> 
Response.write(sSetVal) 

Notez que Response.BufferOutput = false est définie lorsque la page commence à exécuter (bien avant que le code ci-dessus exécute).

Le code est utilisé pour mettre à jour un message de progression tandis que d'autres threads exécutent des processus de longue durée. Un thread s'exécute en continu et vérifie l'état des autres threads. Au fur et à mesure que les autres threads terminent, ce thread envoie des messages d'état mis à jour à l'utilisateur final. Je me rends compte que cela pourrait (devrait) être recodé en utilisant ajax, mais c'est une application héritée et ce n'est pas une option pour le moment.

Ce code est exécuté 10 000+ fois par jour, et l'erreur se produit environ 5 fois. Je pense donc que l'objet de réponse est bloqué par d'autres threads lorsque le site Web est occupé. Cependant, je ne connais pas les compteurs de performance à vérifier dans le moniteur de performances. Ou ce problème est-il causé par autre chose? J'utilise IIS 6, asp.net v2 et vb.net

+0

Veuillez publier l'exception complète, y compris toutes les InnerException, en interceptant l'exception et en postant ex.ToString(). –

+0

Merci pour la réponse rapide. Jusqu'à maintenant, je venais d'utiliser: Server.GetLastError().ToString() dans le sous-menu Application_Error. et la sortie pour cette erreur a seulement été
System.Web.HttpException: Request timed out. Toutes les autres erreurs ont la pile d'appel complet, mais pas celle-ci. J'ai ajouté le .InnerException à mes rapports d'erreur, et je verrai quoi d'autre est rapporté. Je vide l'emplacement actuel vers l'objet Session, puis je le vérifie lorsque l'erreur se produit. C'est ainsi que je sais qu'il échoue sur le fichier response.write sans une pile d'appels complète. –

+0

OK - l'erreur s'est produite à nouveau. L'expiration interne est vide. Le seul message d'erreur est "System.Web.HttpException: la requête a expiré". à partir de Server.GetLastError(). ToString(). –

Répondre

0

Avez-vous essayé de déplacer le Response.BufferOutput = false avant le Response.Write?

Je voudrais essayer de surveiller les compteurs de performance pour l'utilisation de la mémoire et les collections GC2.

+0

La déclaration Response.BufferOutput = false était juste pour montrer quel était le statut de la valeur - il est placé juste au début de l'exécution. J'ai également essayé Response.BufferOutput = true, puis expire sur l'instruction Response.Flush() suivante. –

+0

vous suggère de le déplacer au début de l'exemple de code ... –

+0

OK, j'ai déplacé le Response.BufferOutput = false pour le rendre plus clair. –

Questions connexes