2008-11-13 23 views
6

Mi aplicación ASP.NET necesita una cantidad de servicios de soporte para ejecutarse periódicamente en segundo plano. Por ejemplo:¿Cuál es la mejor manera de implementar servicios en segundo plano para una aplicación ASP.NET?

  • necesito para consultar la base de datos (o caché) cada 1-5 minutos, identificar los elementos de trabajo pendientes y notificar a los usuarios por correo electrónico
  • necesito para generar informes nocturnos que luego son enviadas por correo electrónico a los suscriptores
  • más otras tareas de administración del sistema/usuario no

¿Cuál es la mejor manera de poner en práctica estos servicios? ¿Debo incluirlos como parte de la aplicación web, comenzando una instancia de cada 'servicio' en Application_Start()? ¿O crearlos como servicios independientes reales? Si fueran parte de la aplicación web, potencialmente podría utilizar mi almacén de datos en caché, pero ¿hay algún inconveniente en este enfoque?

Gracias por cualquier consejo.

+0

Ver también http: // stackoverflow.com/questions/1424837/best-asp-net-background-service-implementation – spoulson

Respuesta

6

Este año tuve que implementar una única tarea para almacenar en caché algunos datos de una base de datos, tenía que verificar un código cambiante cada n minutos, encontré este artículo muy bueno;

Simulate a Windows Service using ASP.NET to run scheduled jobs

lo hice de esa manera y funcionó, pero como ya he dicho que era sólo era una sola tarea, pero si ves el ejemplo anterior se puede ver que realiza varias tareas.

Como puede ver, en la memoria caché puede realizar una tarea en cualquier momento y en intervalos, la tarea nocturna podría realizarse a la medianoche, las demás cada n minutos u horas.

Espero que ayude.

1

- Para la generación de informes nocturnos, buscaría en SQL Reporting Services porque tienen algunos servicios de suscripción nativos que le permiten enviar informes por correo electrónico a usuarios con código virtual no personalizado.

- Para las notificaciones de artículos de trabajo vencidos, puede utilizar SSRS (mencionado anteriormente) enviándoles un informe con sus artículos vencidos o, si está ejecutando SQL 2k5, use Notification Services.

+0

si está ejecutando SQL 2008, no use Notification Services como lo han eliminado. – gbjbaanb

1

Hizo subprocesos de hilos de trabajo e hilos que hacen cosas periódicamente en mi aplicación ASP.NET y no he tenido ningún problema.

no me acaba de ejecutar la aplicación en casa - Others y ejecutarlo en sus sitios, o bien puede hacerlo en empresas de alojamiento, por lo que hacer las cosas sin necesidad de que un servicio de instalarse hace que las implementaciones más fácil.

1

Un temporizador combinado con un trabajador de fondo ha funcionado bien para mí:

Timer timer = new Timer(intervalSeconds * 1000) 
timer.Elapsed += delegate 
{ 
    // do the meat 
}; 
timer.Start(); 

Tenga en cuenta que usted no tendrá acceso a la HttpContext y que el sitio puede cerrar debido a la inactividad.

0

Honestamente, nunca he sido un fan de intentar simular un servicio de Windows dentro de un proceso ASP.net, especialmente cuando se considera lo fácil que es crear un servicio de Windows. La mayoría de los intentos que he visto al hacerlo han estado llenos de problemas.

Cuestiones relacionadas