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: [email protected] [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" <[email protected]>
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: [email protected] [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