Separar hilos en un servicio web después de que se complete

Si esto se ha solicitado antes de mis disculpas, y esto es .NET 2.0 ASMX Web services, nuevamente mis disculpas = D

Una aplicación .NET que solo expone servicios web. Aproximadamente 10 millones de mensajes por día de carga equilibrada entre varios servidores IIS. Cada mensaje entrante es XML, y un mensaje saliente es XML. (XMLElement) (tenemos servidores robustos que funcionan con esteroides).

Tengo un SLA en el que todos los mensajes se procesan en menos de X segundos.

Una función, los Métodos de Enlace, en el proceso ahora toma de 10 a 20 segundos, se requiere para cada transacción, sin embargo, no es crítico que suceda antes de que el servicio web devuelva los resultados. Debido a esto, hice una sugerencia de lanzarlo a otro hilo, pero ahora me doy cuenta de que mis palabras y los ansiosos desarrolladores detrás de ellos podrían no haberlo pensado completamente.

El siguiente ejemplo muestra a la izquierda el flujo de corriente. A la derecha lo que se intenta

Efectivamente, lo que estoy buscando es que un servicio web genere un hilo de larga ejecución (10-20 segundos) que se ejecutará incluso después de que se complete el servicio web.

Esto es lo que, efectivamente, está sucediendo:

        Thread linkThread= new Thread(delegate()
        {
            Linkmembers(GetContext(), ID1, ID2, SomeOtherThing, XMLOrSomething);
        });
        linkThread.Start();

Usando esto, hemos reducido el tiempo de 19 segundos a 2.1 segundos en nuestras cajas de desarrollo, lo cual es bastante importante.

Me preocupa que con la cantidad de tráfico que recibimos, y si un proveedor / parte externa decide estrangularnos, IIS podría decidir reciclar / eliminar esos hilos antes de que terminen de procesarse. Estoy de acuerdo en que nuestra solución podría no ser la "mejor", sin embargo, no tenemos tiempo para construir un sistema de colas u otro servicio de Windows para manejar esto.

¿Hay una mejor manera de hacer esto? ¿Alguna advertencia que deba tenerse en cuenta?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta