servidor registrado publicar net missing instalar framework asp application aplicacion asp.net iis-7 windows-services asp.net-4.0 appfabric

registrado - Reflexiones sobre la ejecución de aplicaciones de tipo de servicio de Windows en ASP.NET 4 con StartMode="AlwaysRunning"



install framework in iis (3)

Por lo general, me gustaría escribir un Servicio de Windows para administrar las tareas que no son adecuadas para ser alojadas en una aplicación web. Estos tipos de tareas suelen ser procesos de larga ejecución o tareas programadas. Aunque este suele ser el enfoque principal para este tipo de tareas, las people han buscado formas de ejecutar este tipo de procesos en segundo plano en una aplicación web iniciando una serie de subprocesos en el evento Application_Start expuesto por Global.asax. El problema con este enfoque siempre ha sido que si su proceso de trabajo de IIS muere, su hilo de fondo también se cancela (efectivamente, su ''Servicio de Windows'' se detiene hasta que se recibe la próxima solicitud).

ASP .NET 4.0 ofrece una solución a este problema. Ahora puede configurar StartMode en ''AlwaysRunning'' como se describe en esta publicación de blog de Scott Gu. Somewhere de los comentarios de esta publicación, alguien pregunta sobre la viabilidad de hospedar tareas de tipo de Servicio de Windows en IIS, ya que la nueva característica garantiza que el proceso de trabajo siempre se esté ejecutando. Scott mencionó que definitivamente apoyaría el escenario. Además de esto, la reciente introducción de AppFabric significa que los mismos Microsoft proporcionan AppFabric simples para hospedar y monitorear los servicios WCF y WF en una aplicación web.

¿Qué significa esto para aquellos de nosotros que solíamos escribir Servicios de Windows para admitir nuestras aplicaciones web? ¿Debemos adoptar este modelo? ¿Cuáles son las trampas? Por lo que puedo decir, hay una serie de beneficios al hospedar procesos de ''Servicio de Windows'' en una aplicación web, la más útil es la facilidad de implementación. Además, podemos comenzar a desarrollar interfaces de usuario simples para nuestros servicios que brindan información sobre lo que está sucediendo en el tiempo de ejecución.

Si tuviera que seguir esta ruta, no creo que alojaría mi funcionalidad de tipo "Servicio de Windows" en la aplicación web que se enfrenta al cliente. Probablemente desarrollaría un nuevo proyecto de aplicación web (como lo haría en el contexto del Servicio de Windows) que alojaría mis procesos de tareas programadas o de larga ejecución. Supongo que hay pocas razones para esto.

  1. Seguridad Puede haber un modelo de seguridad diferente para la interfaz de usuario que muestra información sobre los procesos en segundo plano en ejecución. No quisiera exponer esta IU a nadie más que al equipo de operaciones. Además, la aplicación web puede ejecutarse como un usuario diferente que tiene un conjunto elevado de permisos.
  2. Mantenimiento Sería genial poder implementar cambios en la aplicación que aloja los procesos en segundo plano sin afectar el uso del usuario en el sitio web de front-end.
  3. Rendimiento Tener la aplicación separada del sitio principal que procesa las solicitudes de los usuarios significa que los subprocesos en segundo plano no disminuirán la capacidad de IIS para manejar la cola de solicitudes entrantes. Además, la aplicación que procesa las tareas en segundo plano podría implementarse en un servidor separado si fuera necesario.

Me interesaría mucho escuchar sus opiniones sobre este enfoque y si debo mantener los servicios de Windows. Estoy muy tentado de probar este nuevo enfoque.


¿Cuáles son las trampas?

Uno que encontré, ningún evento de apagado. Tiene AppStart cuando se inicia el sitio web (no global.asax porque eso es solo HTTP) pero no tiene forma de manejar el apagado, lo que podría significar que la eliminación se convierta en un problema.


¿Qué significa esto para aquellos de nosotros que solíamos escribir Servicios de Windows para admitir nuestras aplicaciones web?

Creo que este es un escenario clave en el que podría pasar de un servicio de Windows a usar el sitio web en ejecución continua.

¿Debemos adoptar este modelo?

Respuesta de desarrollo estándar: Depende;)

¿Cuáles son las trampas?

Un problema que puedo ver es la dependencia de IIS. Si necesita un servicio para ejecutarse en una máquina de usuarios, no me sentiría cómodo pidiéndoles que instalen IIS solo para ejecutar mi servicio. Aquí creo que el modelo tradicional funciona mejor.

La supervisión y el seguimiento son problemas importantes, pero como también señala, esto se resuelve con AppFabric. Es incluso mejor que lo que se obtiene del Servicio de Windows. Sin embargo, ha agregado otra dependencia que también requerirá .NET 4.0 y una versión relativamente nueva de Windows. También podría estar equivocado aquí, pero tengo entendido que AppFabric no es compatible con la producción en los sistemas operativos de los clientes. Lo que podría traer en dolores de cabeza adicionales.

También perderá la funcionalidad de pausa en el modelo de sitio web continuo.

Finalmente, IIS no es la única forma en que un grupo de aplicaciones puede reciclar. La edición de un archivo web.config lo provoca, por ejemplo, que puede no ser una situación ideal.

Lo más útil es la facilidad de despliegue.

También creo que el desarrollo es mucho más fácil: en el pasado he tenido una aplicación de consola y un servicio de Windows, por lo que puedo hacer dev / test en mi máquina usando la aplicación de consola y luego cambiarla a un servicio de Windows cuando se apaga. Ahora dev / test es mucho más fácil.

Una lectura obligada para esto es Death to Windows Services ... Long Live AppFabric!


Yo sugeriría quedarse con un servicio de Windows. El problema está en su número 2. No podrá actualizar la parte del servicio del sitio web sin reiniciar todo el sitio web.