Fe de erratas: desde el servicio llamas a NotificadorMgr.ProcesarTareas y no a EnviarEmails() Es que yo lo tengo implementado para un envío masivo de emails, de allí el "error" Pata.
-----Mensaje original----- De: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de Pata del Santo Enviado el: viernes, 27 de octubre de 2006 16:34 Para: puntonet List Member Asunto: [puntonet] Post y Timer: Como optimizarlo vale, ahora sí... Lo que tú quieres montar es un "Servicio", que se encarga de ejecutar "tareas pendientes". Yo creo que se trata de dos proyectos. 1. Proyecto NotificadorMgr (o el nombre que más te guste) Un solo método: Public Shared Sub ProcesarTareas(byVal pConnectionString as String, pServidorSMS as String) Try Dim arrayTareas() as TareasClass arrayTareas = _RecuperarTareasPendientesBBDD(pConnectionString) For each tarea as TareaClass in arrayTareas _ProcesarTareaPendiente(pServidorSMS,tarea) _MarcarTareaCompletada(pConnectionString,tarea.IdTarea) End For Catch ex as Exception 'Log de errores End Try End Sub Creo que los comentarios sobran, los métodos privados que empiezan con _ hacen lo siguiente: - Recuperan todas las tareas pendientes que hay en BBDD para cada tarea - Procesar la tarea (por ejemplo, enviar un SMS y registrar en un log) - Marcan la tarea como procesada Ahora puedes llamar a NotificadorMgr.ProcesarTareas(miConnString,miServidorSMS) desde cualquier lado, por ejemplo desde una aplicación de escritorio donde el usuario hace click cuando quiere, o bien el click es automático con un timer. Esta aplicación puede ir refrescando el log de actividades y el log de errores, también podría detenerse ante la existencia de un registro en el log de errores. O bien puedes llamar a este mismo método desde un "Servicio" 2. Proyecto NotificadorSvc (o el nombre que más te guste) Este proyecto tiene un App.config donde pones el string de base de datos y la url del servidor SMS, etc. Se instala como un servicio de windows. Tienes que poner un Installer, donde le puedes poner que arranque automático o manual. Dentro del servicio, en el OnStart escribes una bienvenida en el log y arrancas un thread "LanzarTareas" en el OnStop escribes una despedida en el log Dentro del método LanzarTareas primero matas cualquier thread que te hubiera quedado colgado Y luego llamas a NotificadorMgr.EnviarEmails, con los parámetros del app.Config Revisa la documentación sobre servicios de windows, para ver maores detalles de implementación e instalación. Igual necesitarías alguna aplicación de escritorio para mostrarle el estado de los logs al usuario admin. Yo en tu lugar primero lo haría con una aplicación de escritorio (a petición o con timer) Una vez que te funcione bien, entonces implementas el windows service. Pata. -----Mensaje original----- De: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de Federico Lazarte Enviado el: viernes, 27 de octubre de 2006 15:16 Para: puntonet List Member Asunto: [puntonet] Post y Timer: Como optimizarlo Hola. Gracias por contestar. La opción del while me parece muy buena y me serviría para lo que necesito. La componente es para el envío de SMS y una de los operadores se maneja mediante post. La idea es cargarlo como un servicio de windows, que corra constantemente en el servidor de ellos. Tiene una pequeña interfaz donde se muestran los logs de recepción y entrada de sms, que seria lo único que se le muestra al usuaria, mas unos valores de configuración. Usando el while lo ubicaría al final del form.load, así una vez que termine de cargar todos los controles, comience el ciclo infinito. Ahora bien, puede tener el while funcionando de manera infinita y tener una opción de pararlo? No me bloquea la pantalla?. No trabaje nunca con este tipo de ejecución así que cualquier info es bienvenida. Gracias Federico Lazarte ----- Original Message ----- From: "Pata del Santo" <[EMAIL PROTECTED]> To: "puntonet List Member" <puntonet@mug.org.ar> Sent: Friday, October 27, 2006 5:30 AM Subject: [puntonet] Post y Timer: Como optimizarlo Pienso que no se puede plantear una ejecución "cada segundo" porque entonces tenés problemas si los procesos demoran más de un segundo (como veo que te pasa...) Se puede plantear un proceso infinito, sin pausas. while True LeerTabla1() LeerTabla2() PostearRegistros() end while En este ejemplo, cuando termine de postear comenzará de nuevo, eternamente. Se puede plantear una espera de un segundo, entre cada set de tareas: while True LeerTabla1() LeerTabla2() PostearRegistros() EsperarUnSegundo() end while En este ejemplo, cuando termina de postear espera un segundo y luego comienza de nuevo. Pero no podés lanzar las tareas asincrónicamente, porque te pasa lo que decís. while True LeerTabla1() LeerTabla2() start new thread PostearRegistros() EsperarUnSegundo() end while En este ejemplo, se acumulan los threads pendientes y en algún momento explota. Ayer vi un ejemplo de Chat utilizando los Callbacks de AJAX, tal vez te sirva eso? Pata. -----Mensaje original----- De: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de Federico Lazarte Enviado el: jueves, 26 de octubre de 2006 23:31 Para: puntonet List Member Asunto: [puntonet] Post y Timer: Como optimizarlo Estimada Lista Tengo el siguiente inconveniente que resolver: Debo diseñar una componente en la que cada 1 segundo, lea 5 registros de una tabla, 5 registros de otra tabla, y, con esos 10 registros, realizen el post a una url A la componente la tengo lista, el echo es que al hacer el primer post, demora tanto que ya esta leyendo los proximos 10 registros y recien se postearon uno o dos registros. Alguien sabe de que forma puedo optimizar esto?. Ese proceso se debe realizar cada un segundo, ya que es un sistema de mensajes de texto. Muchas gracias. Federico