ASPNL logo (1 kb)
zaterdag 17 mei 2008




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

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)
   'huidige timeout bewaren
   timeout = Server.ScriptTimeout

   'nieuwe timeout instellen
   Server.ScriptTimeout = 600 '10 minuten
End Sub

Sub Page_Unload(sender As Object, e As EventArgs)
   'oorspronkelijke timeout terugzetten
   Server.ScriptTimeout = timeout
End Sub

'hier volgt andere code

C#
int timeout;

void Page_Init(object sender, EventArgs e) {
   //huidige timeout bewaren
   timeout = Server.ScriptTimeout;

   //nieuwe timeout instellen
   Server.ScriptTimeout = 600; //10 minuten
}

void Page_Unload(object sender, EventArgs e) {
   //oorspronkelijke timeout terugzetten
   Server.ScriptTimeout = timeout;
}

//hier volgt andere code


<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL