Voy a publicar una solicitud a un servicio WCF MSMQ alojado en IIS 7 WAS. Hay an awesome article cómo configurarlo.
Las tareas de ejecución prolongada que utilizan recursos externos tienen un alto riesgo de error. El error más grande que los desarrolladores suelen cometer es suponer que el hardware y las redes tienen una capacidad ilimitada y son muy confiables. A menudo no es.
Puede ser problemático, incluso catastrófico, si el proceso prolongado se interrumpe por la pérdida momentánea de la conectividad de la red o si se reinicia el servidor remoto. Si su proceso de ejecución prolongada incluye procesamiento adicional, como descomprimir el archivo o analizarlo, puede correr un mayor riesgo de falla si no hay suficiente memoria para realizar el procesamiento. Los usuarios pueden enviar demasiadas solicitudes y no hay suficientes recursos disponibles para manejar los problemas concurrentes. Si permite que su aplicación ASP.NET MVC realice el procesamiento a través del async controllers, entonces se sorprenderá cuando se interrumpa su proceso de larga ejecución cuando IIS recicla el proceso de trabajo.
MSMQ 4 hace un buen trabajo para mitigar estos riesgos. Si el proceso falla, puede intentarlo un par de veces antes de darse por vencido. Puede aprender a configurarlo here. Puede usar application specific deadletter queues para manejar el caso donde el proceso falló después de una cantidad de intentos aceptables. Esto es importante para el personal operativo para diagnosticar problemas. También puede usar este esquema para notificar a un usuario por correo electrónico que el proceso falló (o tuvo éxito), incluso si la máquina desde la que se originó la solicitud está apagada.
Alojarlo en IIS en lugar de un servicio de Windows ofrece capacidades adicionales. Por ejemplo, el proceso de trabajo de IIS se puede reciclar si se estanca o excede un umbral de memoria. Esto último puede ser un problema cuando está usando algún código nativo para realizar el procesamiento. Puede reciclarlo cada cuatro (elija su marco de tiempo) horas. Esto último es bastante importante cuando se trabaja con grandes cantidades de memoria administrada porque con el tiempo la cabeza del objeto grande se fragmenta tanto que resulta casi imposible administrar la asignación de suficiente memoria para otra solicitud grande. Puede encontrar que un servicio WCF alojado en un Servicio de Windows puede sufrir este problema.
En realidad, depende de qué tan confiable sea el proceso de fondo. De lo contrario, el uso de WCF, MSMQ e IIS puede ser excesivo.
Para MVC 3, consulte mi artículo de MSDN: http://msdn.microsoft.com/en-us/library/ee728598(VS.98).aspx Si puede usar MVC 4 y Developer Express 11, estoy escribiendo un nuevo tutorial Async/MVC que es mucho más simple. – RickAndMSFT