Timer en Global.asax

03/12/2007 - 11:23 por LunNna | Informe spam
Hola a todos. Necesito que una función se ejecute una vez al día. Lo que hace
esta funcion es comprobar si hay trabajos que están por cumplir su fecha de
vencimiento, y en tal caso manda un mail al responsable comunicándoselo.
Para esto creo un timer en el evento Application_Start del Global.asax y le
puse el interval para que se ejecute cada 24 horas.
El problema que me surge es que no se ejecuta cada 24 horas, sino que se
ejecuta cuando alguien inicia una sesión en la aplicación, con lo que no
puedo depender de que un usuario use el sistema para que se llame a la
función. Alguien sabe qué puede estar funcionando mal?

Os paso el código por si es de ayuda:

public class Global : System.Web.HttpApplication {

protected void Application_Start(object sender, EventArgs e) {
Timer timer = new Timer();
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

timer.Interval = 86400000;
timer.Enabled = true;

}

private static void OnTimedEvent(object source, ElapsedEventArgs e) {
Alarmas alarma = new Alarmas();

alarma.alarmaTrabajos();
}

}

Muchas gracias.
 

Leer las respuestas

#1 Alberto Poblacion
03/12/2007 - 12:14 | Informe spam
"LunNna" wrote in message
news:
Hola a todos. Necesito que una función se ejecute una vez al día. Lo que
hace
esta funcion es comprobar si hay trabajos que están por cumplir su fecha
de
vencimiento, y en tal caso manda un mail al responsable comunicándoselo.
Para esto creo un timer en el evento Application_Start del Global.asax y
le
puse el interval para que se ejecute cada 24 horas.
El problema que me surge es que no se ejecuta cada 24 horas, sino que se
ejecuta cuando alguien inicia una sesión en la aplicación, con lo que no
puedo depender de que un usuario use el sistema para que se llame a la
función. Alguien sabe qué puede estar funcionando mal?



El problema que vas a tener operando asi es que cada vez que se cierre la
aplicación te va a dejar de funcionar el Timer, hasta que un usuario la
vuelva a usar, momento en que la aplicación arranca otra vez. Y no puedes
confiar en que esté siempre arrancada y no se cierre nunca, porque el IIS la
recicla periódicamente, y también se recicla cuando haces cambios sobre los
ficheros de la aplicación (por ejemplo, si editas el web.config).

Sería mejor que para esto usaras un Servicio Windows. El Servicio sí que
se mantiene "vivo" permanentemente, mientras no lo cierres aposta o apagues
el ordenador, y es más adecuado para ejecutar una tarea periódica.

Preguntas similares