ASP Tipp 16: Vermeiden Sie lange Wartezeiten durch Verwendung von Response.IsClientConnected

Wenn Benutzer ungeduldig werden, brechen sie Ihre ASP-Seite möglicherweise ab, bevor Sie mit dem Ausführen ihrer Anfrage beginnen können. Wenn sie auf Aktualisieren klicken oder auf Ihrem Server auf eine andere Seite wechseln, befindet sich eine neue Anfrage am Ende der ASP-Anfragewarteschlange und eine abgetrennte Anfrage in der Mitte der Warteschlange. Dies geschieht häufig bei einem stark belasteten Server (die Anfragewarteschlange ist in diesem Fall sehr lang und bringt ebenso lange Antwortzeiten mit sich) und führt zu einer Verschlimmerung der Situation. Es ergibt keinen Sinn, eine ASP-Seite (und insbesondere eine langsame, umfangreiche ASP-Seite) auszuführen, wenn der Benutzer nicht mehr verbunden ist. Sie können dies mit der Response.IsClientConnected-Eigenschaft überprüfen. Wenn sie False zurückgibt, sollten Sie Response.End aufrufen und den Rest der Seite abbrechen. Dieses Verhalten ist in IIS 5.0 im Code enthalten, d. h. wenn ASP im Begriff ist, eine neue Anfrage auszuführen, prüft es zuerst, wie lange die Anfrage sich schon in der Warteschlange befindet. Befindet sie sich schon seit mehr als 3 Sekunden in der Warteschlange, prüft ASP, ob der Client noch angeschlossen ist und bricht die Anfrage sofort ab, wenn dies nicht der Fall ist. Sie können diese Zeitüberschreibung in der Metabasis mit der AspQueueConnectionTestTime-Einstellung ändern.  

Bei einer Seite, deren Ausführung sehr lange dauert, sollten Sie außerdem Response.IsClientConnected in regelmäßigen Abständen prüfen. Wenn der Antwortpuffer aktiviert ist, empfiehlt es sich, Response.Flush in regelmäßigen Abständen auszuführen, damit der Benutzer den Eindruck hat, dass etwas passiert.

Anmerkung In IIS 4.0 funktioniert Response.IsClientConnected nicht ordnungsgemää, wenn Sie nicht zuerst eineResponse.Write-Anweisung ausführen. Wenn der Antwortpuffer aktiviert ist, können Sie auch eine Response.Flush-Anweisung ausführen. In IIS 5.0 ist dies nicht nötigt; Response.IsClientConnected funktioniert problemlos. Response.IsClientConnected ist in jedem Fall mit einigen Kosten verbunden. Verwenden Sie diese Anweisung daher nur vor einem Vorgang, der mindestens 500 Millisekunden dauert (das ist eine lange Zeit, wenn Sie versuchen, einen Durchsatz von mehreren Dutzenden von Seiten pro Sekunde zu erreichen). Als Faustregel gilt, diese Anweisung nicht bei jeder Wiederholung einer engen Schleife, wie z. B. beim Zeichnen der Zeilen einer Tabelle, sondern sie eher alle 20 oder 50 Tabellenzeilen aufzurufen.