Foros del Web » Programación para mayores de 30 ;) » .NET »

Ejecutar función cada cierto tiempo

Estas en el tema de Ejecutar función cada cierto tiempo en el foro de .NET en Foros del Web. Hola qtal, Tengo una aplicación que necesita comprobar cada cierto tiempo, por ejemplo cada 5 minutos, si han llegado nuevos mails a una cuenta de ...
  #1 (permalink)  
Antiguo 01/12/2003, 05:31
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Ejecutar función cada cierto tiempo

Hola qtal,
Tengo una aplicación que necesita comprobar cada cierto tiempo, por ejemplo cada 5 minutos, si han llegado nuevos mails a una cuenta de correo del Outlook. El código que me mira en el buzón de entrada si hay nuevos mails ya lo tengo (usando el componente MAPI). Lo que necesito ahora es saber si es posible que mi página .aspx sea capaz de hacer esa comprobación de manera automática o, si por el contrario, sólo puedo recuperar los mails con un botón.

La idea, más o menos, sería tener una Label que me indique el número de mails nuevos que van llegado a la cuenta de correo (de ahí que me gustaría que fuese un proceso automático que informara al usuario si hay nuevos mails). De ser así, el usuario pincharía en esa etiqueta y los mails se guardarían en una tabla de base de datos y se actualizaría un DataGrid con los valores de esa tabla.

Se entiende la idea?
Gracias y saludos
  #2 (permalink)  
Antiguo 01/12/2003, 11:34
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Hola Albertron, lo que estas comentando se haría sin problemas si se tratara de una windows form, pero para una web form es distinto y para que tenga su propio contador en último de los casos podrías poner un javascript que te refresque la página y cheque la info,pero hay ocasiones que cuando refrescas la página el mismo explorador te envía un mensaje de que la pagína no puede ser actualizada sin reenviar la informacion.. y ésto provocaría que en tu web form estuviera mostrando a cada rato ese mensaje.

Tengo yo mas o menos algo como tu.. pero en mi caso es para informar en la intranet los reportes que estan pendientes y lo que hago es colocar un boton (que solo es visto y accesible por el administrador) y ejecutarlo para enviar la informacion necesaria.

Así que con ésto tu verás que es lo mas conveniente.

Si alguien tiene alguna otra idea.. será bienvenida.


Saludos y suerte
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 01/12/2003, 13:35
 
Fecha de Ingreso: marzo-2002
Mensajes: 188
Antigüedad: 22 años, 2 meses
Puntos: 0
Hola Rootk,

Si no te he entendido mal, usando un Web Form tu te decantarías por poner un botón que lance el proceso de recuperar los mails, insertarlos en la tabla y mostarlos en el datagrid (previo refresco de la página). Evidentemente ese botón sería visible sólo por el usuario administrador.


También comentas que con un Windows Form no habría problemas. Cual es la diferencia entre el Web Form y el Windows Form en este caso particular?. Es decir, porqué en un caso no se podría hacer y en el otro no le ves ningún problema?

Gracias y saludos
  #4 (permalink)  
Antiguo 01/12/2003, 13:41
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Cual es la diferencia entre el Web Form y el Windows Form en este caso particular
Lo que pasa es que en una windows forms cuando tu manejas eventos estos se ejecutan exlusivamente en los controles que los llaman en cambio en una web form siempre pasan por el init y el load, por mencionar alguno de ellos.

Por otro lado en una windows form puedes colocar el componente timer y dentro de el hacer que se ejecute la tarea requerida ya que se crea una especia de subproceso de la aplicacion cosa que con un web form no se podría hacer directamente.

Espero que me haya dado a entender.

Saludos
  #5 (permalink)  
Antiguo 02/12/2003, 09:42
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola,

creo que lo que quieres hacer es que cuando haya mensajes nuevos en la bandeja estos se puedan insertar automaticamente en la base de datos. Pues bien, echando una ojeada por msdn
he encontrado un tipo especial de timers que se ejecutan en el servidor y sobre los que puedes ver algo aqui:

http://msdn.microsoft.com/library/de...asedtimers.asp

Dentro de esta pagina podras encontrar otros enlaces con ejemplos (alguno similar a lo que pides)
Espero que te pueda servir, por otro lado, lo de que se actualice la pagina cada cierto tiempo lo veo más complicado, por los problemas que ya te han dicho, pero si puedes conseguir que se haga la insercion automaticamente eso te puede dar igual.

  #6 (permalink)  
Antiguo 02/12/2003, 11:40
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Pues bien, echando una ojeada por msdn
he encontrado un tipo especial de timers que se ejecutan en el servidor
Estoy de acuerdo, pero esas características son para "Windows Forms" y lo que se necesita son para Web Forms

Saludos
  #7 (permalink)  
Antiguo 02/12/2003, 12:19
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0

No se si has mirado la pagina, pero yo entindo que ese tipo de timers se puede utilizar para lo que Albertron nos dice. por si puede aclarar algo mas las ideas, aqui dejo otro enlace:

http://msdn.microsoft.com/library/de...asedtimers.asp

ade+ este tipo de timers no esta en windows.forms, sino en System.timers. Miratelo bien
  #8 (permalink)  
Antiguo 02/12/2003, 12:27
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
y si sirve de ayuda cito textualmente:

You create Timer components when you want to build interval-based events into your multi-threaded application. You can add an instance of the Timer component to Web Forms , Windows Services, and component classes. If you add an instance of the Timer component to a visual designer (such as the Web Forms Designer) , the component appears in a small area below the bottom border of the form. This is known as the component tray and acts as a place to display all of the non-visual items associated with the form.

ahora bien, si estoy equivocado mis mas sinceras disculpas, pero realmente creo que por ahi se puede hacer algo
  #9 (permalink)  
Antiguo 02/12/2003, 19:08
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Ok... estoy de acuerdo que se puede crear la instancia en un web form, pero si te das cuenta en este link, comentan que están optimizados para una windows form.

http://msdn.microsoft.com/library/de...asedtimers.asp

Cita:
the standard Windows-based timer you can see on the Windows Forms tab of the Toolbox, and the thread timer that is only available programmatically. The Windows-based timer has existed in Visual Basic since version 1.0, and has remained essentially unchanged. This timer is optimized for use in Windows Forms applications. The server-based timer is an update of the traditional timer that has been optimized to run in a server environment.
De todas formas voy a seguir investigando porque si se puede hacer eso con una web form estaría genial.

Pero hay que ver como funcionaría porque estamos de acuerdo que una web form no podemos tener subprocesos a menos que sean del lado del cliente cosa que con un windows form si podemos hacer.
  #10 (permalink)  
Antiguo 10/12/2003, 06:51
Avatar de juagarc4  
Fecha de Ingreso: octubre-2003
Ubicación: En casa
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Estoy de acuerdo con RootK

Hola, que tal:
Estoy con RootK, yo tengo el mismo problema y he probado lo que dices lucxx, pero no funciona.
Es cierto que hace referencia a que puede ser usado como Timer del Server, pero la manera de usarlo es para windows Forms, no para web Forms.

Aún no he resuelto mi proublem, pero estoy en ello, en cuanto averigue algo, ya lo posteo akí.
De momento no he encontrado nada, y lo poquísimo que hay está muy mal referenciado.

Lo único que se me ocurre, es hacer algo parecido a lo que pone en este link:http://www.microsoft.com/spanish/msd...ces/art120.asp

Es decir, encapsular el código en una dll, igual que en el msgbox, para conseguir que se ejecute en el cliente, pero no tengo mu claro como lo haría exactamente, tengo que probarlo, a ver que ocurre.¿Explotará mi ordenata o el del cliente? , jejeje. ya os contaré....
si alguien lo intente primero, pos que lo postee a ver si entre todos podemos hacer bien lo que Micro$oft deja a medias.

Salu2.
__________________
El que pregunta lo que no sabe, es ignorante durante 5 minutos, el que no lo pregunta lo es de por vida (Proverbio Chino)
La tonteria se pone siempre en primera fila, para ser vista. La inteligencia se pones siempre detrás para poder ver. (Alguien lo dijo, seguro)

Última edición por juagarc4; 10/12/2003 a las 07:28
  #11 (permalink)  
Antiguo 10/12/2003, 19:42
Avatar de sindestino  
Fecha de Ingreso: noviembre-2003
Ubicación: xxxx xxxx
Mensajes: 270
Antigüedad: 20 años, 6 meses
Puntos: 0
Yo lo haría así:
primero haría que la página haga un postback automático cada cierto tiempo así:

[DENTRO DEL HEAD]
<META HTTP-EQUIV="refresh" content="1000;URL=http://www.Pagina.aspx">

después en el evento Load pregunto si es PostBack y en caso afirmativo llamo a la bendita función.

Ésto es una aproximación apenas, se puede mejorar mucho: así como está la función se va llamar cada vez que el usuario presione F5 o desencadene cualquier otro postback. Para solucionar eso se puede complementar con JavaScript.

Saludos
  #12 (permalink)  
Antiguo 11/12/2003, 07:12
Avatar de juagarc4  
Fecha de Ingreso: octubre-2003
Ubicación: En casa
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Hola, que tal?
Gracias sindestino, no habia pensado en eso.
Lo he probado y funciona, pero lo que quiero no es actualizar toda la página, solo quiero que se actualice una etiqueta de la página, es para poner un reloj, y quiero que se actualice cada segundo.
Y me gustaria hacerlo sin javascript, a ser posible.
Gracias aotra vez, me has dado algunas ideas que aún tengo que probar. ya os contaré como han ido.
Salu2.
__________________
El que pregunta lo que no sabe, es ignorante durante 5 minutos, el que no lo pregunta lo es de por vida (Proverbio Chino)
La tonteria se pone siempre en primera fila, para ser vista. La inteligencia se pones siempre detrás para poder ver. (Alguien lo dijo, seguro)
  #13 (permalink)  
Antiguo 11/12/2003, 12:17
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola

Vamos a ver, lo de ejecutar una función cada cierto tiempo, no lo veo como para hacer un reloj en la página, hacer eso como dices me parece una brutalidad en cuanto a consumo de recursos, roundtrips y vamos, que no me quiero imaginar a 200 usuarios conectando con el servidor a cada segundo (o minuto, lo mismo me da) simplemente para que se les actualice la hora ¿¿¿???

Lo de ejecutar una funcion cada cierto tiempo, yo lo veo, y ademas es a lo que venia el primer mensaje, para algo como por ejemplo, este suponer:

Bien, supongamos que tengo una inmobiliaria, y, a traves de mi web, los clientes pueden acceder a todo mi catalogo de casas. Bien, supongamos que entre todo el catalogo, mi cliente no encuentra lo que busca y yo, que no dejo escapar una, le doy la oportunidad de que a traves de un formulario me mande los datos de la casa que busca. Bueno, pues cuando el cliente envía el formulario, se produciran las siguientes acciones:
- Los datos se almacenan en una tabla de "pedidos" de la BD
- Se envía un e-mail al responsable de ventas (o al que sea ne cesario) con los datos de la solicitud, o con un enlace mediante el cual él pueda ver los datos de la solicitud. (esto en el ejemplo que quiero poner nos da lo mismo, pero está bien ponerlo)

Entonces, partiendo de la base de que mi catalogo de inmuebles se actualiza en tiempo real, yo puedo querer que la busqueda de inmuebles que coincidan con los solicitados en la tabla de pedidos se realice AUTOMATICAMENTE a eso de, supongamos, las 4:00 a.m. todos los días que es la hora a la que mi servidor soporta menos carga; es decir, para cada entrada de la tabla "pedidos" buscamos en la base de datos si hay casas que coincidan con lo solicitado por el cliente, y, en caso de encontrarse algo, se le manda automaticamente al cliente un mail con enlaces a las casas encontradas.

Pues bien, a eso me refiero con que tal vez (que no lo se) se pueda poner uno de esos puñeteros timers, que controle que cada 24 horas se lleve a cabo esa acción, y este timer correría en el servidor. Evidentemente, no pretendo que una página enviada a un equipo cliente, se actualice automaticamente desde el servidor, eso no se puede hacer si no es el cliente quien pide que se actualicen los datos, y que yo sepa (que tampoco lo se seguro), no se puede poner un timer en la pagina (desde asp.net, desde lenguajes de script que se ejecuten en cliente si se puede hacer eso o por lo menos algo parecido).

De momento, no se como hacer que el caso que he puesto arriba funcione (tampoco le he dedicado mucho...) pero se me ocurre que a lo mejor creando el timer en el evento Application_Start del archivo Global.asax... En fin, que no lo se, si saco algo ya lo posteare

Saludos

PD: no vendo casas
  #14 (permalink)  
Antiguo 11/12/2003, 13:54
Avatar de juagarc4  
Fecha de Ingreso: octubre-2003
Ubicación: En casa
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Creo que he provocado una confusión...

Espera, espera, lucxx, creo que soy el culpable de haber confundido un poco el tema, pido perdón por ello.

Según lo que comentaba Albertron:
Cita:
La idea, más o menos, sería tener una Label que me indique el número de mails nuevos que van llegado a la cuenta de correo (de ahí que me gustaría que fuese un proceso automático que informara al usuario si hay nuevos mails). De ser así, el usuario pincharía en esa etiqueta y los mails se guardarían en una tabla de base de datos y se actualizaría un DataGrid con los valores de esa tabla.
Es decir que cuando se ejecute la función , si han lleguado mensajes nuevos, se tiene que actualizar un label.

No es necesario que tenga haga un reloj, que se actualice cada segundo,simplemente ha de usar un objeto Timer pra ejecutar la función cada cierto tiempo.
El problema es que un Objeto Timer no se puede usar como tal en un Web form, ya que como muy bien dices, este código se ejecutaria en el servidor.

Por cierto, Albertron:
Si tienes la función que mira si hay correos nuevos, puedes hacer perfectamente lo que dice sindestino
Cita:
[DENTRO DEL HEAD]
<META HTTP-EQUIV="refresh" content="1000;URL=http://www.Pagina.aspx">

después en el evento Load pregunto si es PostBack y en caso afirmativo llamo a la bendita función.
y te ahorras muchos problemas. (al fin y al cabo actualizas toda la página una vez cada cierto tiempo).

Lo que yo me referia y ahi es donde ha venido tu confusión, lucxx, es que yo necesito lo mismo, para que en una etiqueta se me muestre un reloj (como en un WinForm) y para eso necesito que se actualice el label a cada segundo y no puedo recargar la página cada segundo (eso es una barbaridad, ya lo se).
Ahora bien, si que me interesaria tener un timer que cada segundo actualizara esa etiqueta (solo la etiqueta), el problema como he comentado unas lineas más arriba, es que el timer no pudo usarlo como tal en un Web Form.

Siento mucho la confusión. Tal vez deberá haber lanzado esto en una pregunta distinta y no haberlo mezclado. Lo siento.
__________________
El que pregunta lo que no sabe, es ignorante durante 5 minutos, el que no lo pregunta lo es de por vida (Proverbio Chino)
La tonteria se pone siempre en primera fila, para ser vista. La inteligencia se pones siempre detrás para poder ver. (Alguien lo dijo, seguro)
  #15 (permalink)  
Antiguo 11/12/2003, 19:51
Avatar de sindestino  
Fecha de Ingreso: noviembre-2003
Ubicación: xxxx xxxx
Mensajes: 270
Antigüedad: 20 años, 6 meses
Puntos: 0
juagarc4 confusión solucionada. Te comento que lo que querés hacer es irremediablemente pasando por JavaScript. Puede que encuentres un un control que te haga ésto mismo sin que tengas que tocar una línea de código JS pero lo hará el control asi que es lo mismo, igualmente no es muy complicado además te recomiendo meterte en el tema ya que es un complemento valiosísimo a la programación en el servidor (yo realmente no me imagino mi vida sin scripts)
te recomiendo ésta página:

http://www.desarrolloweb.com/articul....php?manual=22

saludos
  #16 (permalink)  
Antiguo 13/12/2003, 16:49
Avatar de juagarc4  
Fecha de Ingreso: octubre-2003
Ubicación: En casa
Mensajes: 127
Antigüedad: 20 años, 6 meses
Puntos: 0
Gracias sindestino.
Estoy convencido de que hay que pasar por javascript, lo que yo que (y ya se que igual es una tonteria), es que si a alguien se le ocurriera pulsar el menu "Ver código Fuente" mientras navega por la página, que no vea nada de código escrito (aunque solo sea para un reloj)
Por esode cia de cojer ese código jasvacript i meterlo en una dll, igual que si programaras un control. ya se que parece una tonteria, pero, me gustan los retos...., aunque si lo tuviera hecho ya, pos m'aliviaria de lo mais :D

P.D: La página que me has indicado, me ha gustado, la verdad es que me ha dado algunas ideas . Gracias
Salu2.
__________________
El que pregunta lo que no sabe, es ignorante durante 5 minutos, el que no lo pregunta lo es de por vida (Proverbio Chino)
La tonteria se pone siempre en primera fila, para ser vista. La inteligencia se pones siempre detrás para poder ver. (Alguien lo dijo, seguro)

Última edición por juagarc4; 13/12/2003 a las 16:53
  #17 (permalink)  
Antiguo 26/11/2008, 12:50
 
Fecha de Ingreso: noviembre-2008
Mensajes: 3
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Ejecutar función cada cierto tiempo

Hola a todos...
Necesito algo parecido a lo que estaban comentando.. tengo una aplicacion web.. q cada cierto tiempo(48 horas)..tendria q subir un archivo excel e insertar a una tabla todos los valores de ese archivo.. si alguien me podria dar un ejemplo de como solucionar esto. se lo agradeceria...

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:02.