2012-04-24 8 views
6

Esto es ASP.NET ASMX Web Service/.NET Framework 4.0.ThreadPool.QueueUserWorkItem en el servicio web para la tarea "Incendiar y olvidar"

En el servicio web, quiero ejecutar un método en otro hilo algo así como "Fire and Forget" para que el servicio web devuelva algún valor en respuesta al sitio web. Ese método en otro subproceso podría tardar 10 minutos después de que el servicio web devuelva la respuesta inmediatamente al sitio web. Además, no necesito valor de retorno de ese método.

He probado este escenario utilizando ThreadPool.QueueUserWorkItem y parece que el hilo que comenzó a usar ThreadPool seguirá ejecutándose incluso después de que el servicio web devuelva la respuesta al sitio web. ¿Estoy correcto aquí? También hay una mejor manera de lograr esto?

Respuesta

6

El problema es que de vez en cuando, ASP.NET reciclará el grupo de aplicaciones. Debido a que no sabe acerca de su tarea en segundo plano, no se considerará y se cancelará cuando se elimine el dominio de la aplicación.

La mayoría de las veces, el trabajo se completará, pero si se ejecuta durante el tiempo suficiente, se encontrará con este escenario.

hay dos soluciones:

1) La forma "correcta" es escribir un servicio de Windows que se ejecuta fuera de ASP.NET. Puede enviar instrucciones al Servicio por medio de WCF.

2) La manera "rápida y sucia" es escribir un servicio web oculto en su sitio ASP.NET que nunca es llamado por los usuarios. Su aplicación inicia una solicitud asincrónica al servicio oculto y luego devuelve su propio resultado al usuario, sin esperar.

ASP.NET no sabe que la solicitud al servicio oculto provino de su aplicación, simplemente la trata como otra solicitud. Como ASP.NET conoce esta solicitud, no abortará cuando se recicla.

+0

Hola, Nicholas, ¿cómo el servicio web oculto dentro de asp.net asegura que el grupo de aplicaciones no se reciclará? – Abhijeet

+0

Me interesa lo "rápido y sucio": ¿debería crear una nueva función asíncrona que el usuario llama por el método de servicio web que inició el usuario? –

Cuestiones relacionadas