Pagina timeout veranderen
Door Michiel van Otegem
17 mei 2004
In ASP.NET kan je instellen hoe lang een pagina uitgevoerd mag worden voordat er een timeout
plaatsvindt. Belangrijk is om te weten dat deze timeout voor alle pagina's geldt, en niet alleen
voor de pagina die je uitvoert.
Timeout instellen
Je kunt de timeout instellen via de Server.ScriptTimeout eigenschap, waaraan je het aantal
seconden toekent dat een pagina mag lopen. Dit werkt echter niet altijd. Ten eerste kun je dit niet op
alle plaatsen doen. Alleen in de Page.Init gebeurtenis kun je er zeker van zijn dat dit goed
gaat. Verder is het zo dat als debugging aan staat, deze instelling overschreven wordt. Heb je dus
debug="true" in <filename>web.config</filename> staan,
dan staat de timeout standaard op 30000000 seconden, zodat de debugger de tijd heeft om naar behoren te
werken (dit werkt niet als je debug="true" in de paginadeclaratie zet). Dit terwijl de
timeout normaal gezien slechts 90 seconden is. Bovendien is het zo dat de debugger wijzigingen aan de
timeout negeert.
Langdurende pagina's uitvoeren
Hoewel je over het algemeen niet aan de script timeout moet rommelen, kan het voorkomen dat je een
pagina hebt die een landurige operatie uitvoert, en die daardoor het risico loopt niet volledig uitgevoerd
te kunnen worden. In dat geval kun je de script timeout tijdelijk verhogen, en na afloop van de pagina de
script timeout in z'n oorspronkelijke staat terug zetten. In ASP kon je dit ook doen, en dit was niet zonder
risico, omdat als in de pagina een fout optrad of alsnog de timeout plaatsvond, werd de oorspronkelijke waarde
voor de script timeout nooit terug gezet. Dankzij het pagina model van ASP.NET is dit geen probleem. Je kunt
in de Page.Init gebeurtenis namelijk de script timeout veranderen, en deze in
Page.Unload weer terug zetten. Ook als er een fout optreedt in bijvoorbeeld
Page.Load wordt Page.Unload uitgevoerd, dus weet je zeker dat de oorspronkelijke waarde weer teruggezet wordt.
De voorbeeldcode hieronder laat zien hoe dit in z'n werk gaat.
VB
Dim timeout As Integer
Sub Page_Init(sender As Object, e As EventArgs)
timeout = Server.ScriptTimeout
Server.ScriptTimeout = 600 '10 minuten
End Sub
Sub Page_Unload(sender As Object, e As EventArgs)
Server.ScriptTimeout = timeout
End Sub
C#
int timeout;
void Page_Init(object sender, EventArgs e) {
timeout = Server.ScriptTimeout;
Server.ScriptTimeout = 600; //10 minuten
}
void Page_Unload(object sender, EventArgs e) {
Server.ScriptTimeout = timeout;
}
|