Segmentos separados em um serviço da web depois de concluído

Se isso foi solicitado antes de minhas desculpas, e este é o serviço Web 2.0 ASMX do .NET 2.0, mais uma vez minhas desculpas = D

Um aplicativo .NET que expõe somente os serviços da web. Aproximadamente 10 milhões de mensagens por dia são balanceadas entre vários servidores IIS. Cada mensagem recebida é XML e uma mensagem de saída é XML. (XMLElement) (temos servidores robustos que funcionam com esteróides).

Eu tenho um SLA que todas as mensagens são processadas em X segundos.

Uma função, Vinculando métodos, no processo agora leva de 10 a 20 segundos, é necessária para todas as transações, mas não é essencial que isso aconteça antes que o serviço da Web retorne os resultados. Por causa disso, eu fiz uma sugestão para lançá-lo em outro tópico, mas agora percebo que minhas palavras e os desenvolvedores ansiosos por trás deles podem não ter pensado completamente nisso.

O exemplo abaixo mostra à esquerda o fluxo atual. À direita, o que está sendo tentado

Efetivamente, o que eu estou procurando é ter um serviço da web gerando um segmento de execução longa (10 a 20 segundos) que será executado mesmo após a conclusão do serviço da web.

Isso é o que, efetivamente, está acontecendo:

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

Usando isso, reduzimos o tempo de 19 segundos para 2,1 segundos em nossas caixas de desenvolvimento, o que é bastante significativo.

Estou preocupado que, com a quantidade de tráfego que recebemos, e se um fornecedor / parte externa decidir nos limitar, o IIS pode decidir reciclar / eliminar esses encadeamentos antes que eles sejam processados. Eu concordo que a nossa solução pode não ser a "melhor", no entanto, não temos tempo para construir em um sistema de filas ou outro serviço do Windows para lidar com isso.

Existe uma maneira melhor de fazer isso? Quaisquer ressalvas que devem ser consideradas?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion