2011-12-06 20 views
8

Estoy desarrollando una aplicación .NET 4 que requiere la ejecución de un subproceso de trabajo de back-end. Este hilo está compuesta principalmente por el siguiente código:Proceso de fondo de larga duración en ASP.NET - ¿Proceso de aplicación o separado?

while (true) { 
    //Check stuff in database 
    //Do stuff 
    //write to database/filesystem 
    Thread.sleep(60000) 
} 

aplicación de ASP.NET es sólo un frontend para la base de datos.

Mi pregunta es en torno a dónde sería el mejor lugar para poner este ciclo de trabajo. Parece que mis dos opciones inmediatas serían (1) derivarlo del método Application_Start, y simplemente dejarlo funcionar, o (2) agruparlo en un proceso separado (¿servicio de Windows?)

(1) obviamente Necesito un poco de lógica en el código ASP.NET para verificar que aún se esté ejecutando, ya que IIS podría matarlo. También es bastante claro que toda la lógica de la aplicación está en un paquete fácil de implementar. (2) es mucho más segregado, pero se siente mucho más desordenado.

¿Cuál es el mejor enfoque?

+0

posible duplicado de funcionamiento [hebras de fondo de ASP.NET y largos - ¿cómo se mezclan?] (Http://stackoverflow.com/questions/323693/asp-net-and-long-running-background-threads-how -do-they-mix) – jrummell

Respuesta

13

Si es posible, optaría por el Servicio de Windows. Enlazado de fondo en ASP.NET comes with a lot of baggage.

  1. La duración de su proceso en segundo plano está a merced de IIS. Si IIS decide que es hora de reciclar el grupo de aplicaciones, se reiniciará el proceso en segundo plano. Si IIS decide detener el grupo de aplicaciones debido a la inactividad, el proceso en segundo plano no se ejecutará.
  2. Si IIS está configurado para ejecutarse como un Jardín Web (procesos múltiples por Pool de Aplicaciones), entonces el hilo de fondo podría ejecutarse más de una vez.
  3. Más adelante, si decide equilibrar la carga de su sitio web (varios servidores que ejecutan el sitio), puede que tenga que cambiar la aplicación para asegurarse de que el subprocesamiento en segundo plano solo se realice en un servidor).

y mucho más.

+0

El "equipaje" se ha cuidado con herramientas como [Hangfire] (http://hangfire.io/) - el procesamiento en segundo plano ahora es muy sólido. [Considere estos puntos] (http://stackoverflow.com/a/41734936/56145). –

Cuestiones relacionadas