2009-07-22 5 views
0

Ich erhalte eine intermittierende "System.Web.HttpException: Zeitüberschreitung der Anfrage." Fehler, wenn mein Code die Zeile response.write Hits():"System.Web.HttpException: Zeitüberschreitung der Anforderung." Fehler bei Response.write

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

Beachten Sie, dass Response.BufferOutput = false gesetzt, wenn die Seite zum ersten Mal startet die Ausführung (na ja, bevor der obige Code ausführt).

Der Code wird verwendet, um eine Fortschrittsnachricht zu aktualisieren, während andere Threads lang andauernde Prozesse ausführen. Ein Thread wird kontinuierlich ausgeführt und überprüft den Status der anderen Threads. Wenn die anderen Threads fertig sind, gibt dieser Thread aktualisierte Statusmeldungen an den Endbenutzer aus. Mir ist klar, dass dies mit Hilfe von Ajax rekodiert werden könnte, aber es ist eine Legacy-App, und das ist im Moment keine Option.

Dieser Code wird mehr als 10.000 Mal am Tag ausgeführt, und der Fehler tritt nur etwa 5 mal auf - so vermute ich, dass das Antwortobjekt von anderen Threads blockiert wird, wenn die Website beschäftigt wird. Ich weiß jedoch nicht, welche Leistungsindikatoren im Leistungsmonitor überprüft werden sollen. Oder wird dieses Problem durch etwas anderes verursacht? Ich benutze IIS 6, asp.net v2 und vb.net

+0

Bitte posten Sie die vollständige Ausnahme, einschließlich aller InnerException, indem Sie die Ausnahme abfangen und dann ex.ToString() posten. –

+0

Danke für die schnelle Antwort. Bis jetzt habe ich gerade verwendet: Server.GetLastError().ToString() in der Application_Error Sub. und die Ausgabe für diesen Fehler ist nur
System.Web.HttpException: Request timed out. Alle anderen Fehler haben die vollständige Aufrufliste, aber nicht diese. Ich habe die Fehlermeldung .InnerException zu meiner Fehlerberichterstattung hinzugefügt, und ich werde sehen, was sonst noch gemeldet wird. Ich habe den aktuellen Speicherort auf das Session-Objekt gespeichert und dann überprüft, wenn der Fehler auftritt. Das ist, wie ich weiß, dass es auf der Antwort scheitert. Schreibe ohne einen vollen Anruf-Stapel. –

+0

OK - der Fehler ist erneut aufgetreten. Die innere Wahrnehmung ist leer. Die einzige Fehlermeldung ist "System.Web.HttpException: Zeitüberschreitung der Anforderung." von Server.GetLastError(). ToString(). –

Antwort

0

Haben Sie versucht, die Response.BufferOutput = false zu verschieben, bevor die Response.Write?

Ich würde versuchen, die Leistungsindikatoren für Speicherverbrauch und GC2-Sammlungen zu überwachen.

+0

Die Anweisung Response.BufferOutput = false war nur um zu zeigen, was der Status des Wertes war - es wird gleich zu Beginn der Ausführung gesetzt. Ich habe auch Response.BufferOutput = true versucht, dann kommt es auf die nächste Response.Flush() Anweisung. –

+0

schlagen vor, dass Sie es zum Anfang des Codebeispiels verschieben ... –

+0

OK, ich habe das Response.BufferOutput = false verschoben, um es klarer zu machen. –