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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 LunNna
03/12/2007 - 13:15 | Informe spam
Hola, antes que nada gracias por responder.

La verdad que no conocía lo de los servicios windows. No se muy bien cómo
debo crearlo. Te agradecería si me puedes decir cómo se crea o si tienes
algun link a un artículo o algo donde pueda mirar cómo se utilizan.

Gracias.

"Alberto Poblacion" wrote:

"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.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
03/12/2007 - 16:17 | Informe spam
"LunNna" wrote in message
news:
La verdad que no conocía lo de los servicios windows. No se muy bien cómo
debo crearlo. Te agradecería si me puedes decir cómo se crea o si tienes
algun link a un artículo o algo donde pueda mirar cómo se utilizan.



Desde Visual Studio (no vale la versión Express) hay una plantilla en
Archivo -> Nuevo proyecto -> Visual C# -> Windows -> Servicio Windows. Si la
seleccionas, verás que te crea un proyecto con una clase que hereda de
ServiceBase y que tiene un método OnStart. Dentro del OnStart es donde creas
e inicializas tu Timer. Si buscas ServiceBase en MSDN verás que viene un
ejemplo completo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida