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







Responder a