Trennen Sie Threads in einem Webdienst, nachdem dieser abgeschlossen ist

Wenn dies vor meiner Entschuldigung gefragt wurde und es sich um .NET 2.0 ASMX-Webdienste handelt, ist meine Entschuldigung erneut = D

Eine .NET-Anwendung, die nur Webdienste verfügbar macht. Ungefähr 10 Millionen Nachrichten pro Tag werden auf mehrere IIS-Server verteilt. Jede eingehende Nachricht ist XML und eine ausgehende Nachricht ist XML. (XMLElement) (Wir haben bullige Server, die mit Steroiden laufen).

Ich habe eine SLA, in der alle Nachrichten unter X Sekunden verarbeitet werden.

Eine Funktion, Verknüpfungsmethoden, dauert jetzt 10 bis 20 Sekunden. Sie ist für jede Transaktion erforderlich. Es ist jedoch nicht kritisch, dass sie ausgeführt wird, bevor der Webdienst die Ergebnisse zurückgibt. Aus diesem Grund machte ich den Vorschlag, es auf einen anderen Thread zu werfen, aber jetzt ist mir klar, dass meine Worte und die eifrigen Entwickler dahinter dies möglicherweise nicht vollständig durchdacht haben.

Das folgende Beispiel zeigt links den aktuellen Fluss. Rechts was versucht wird

Eigentlich möchte ich, dass ein Web-Service einen 10-20 Sekunden dauernden Thread erzeugt, der auch nach Abschluss des Web-Service ausgeführt wird.

Das ist, was effektiv vor sich geht:

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

Auf diese Weise haben wir die Zeit auf unseren Entwicklungsboxen von 19 Sekunden auf 2,1 Sekunden reduziert, was ziemlich umfangreich ist.

Ich mache mir Sorgen, dass mit der Menge des Datenverkehrs, die wir erhalten, und wenn ein Anbieter / eine externe Partei beschließt, uns zu drosseln, IIS möglicherweise diese Threads recyceln / löschen, bevor sie verarbeitet sind. Ich bin damit einverstanden, dass unsere Lösung möglicherweise nicht die "beste" ist, wir haben jedoch nicht die Zeit, ein Warteschlangensystem oder einen anderen Windows-Dienst einzurichten, um dies zu handhaben.

Gibt es einen besseren Weg, dies zu tun? Gibt es irgendwelche Einschränkungen, die beachtet werden sollten?

Vielen Dank.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage