Ich erstelle einen WCF-Dienst, der mehrere Vorgänge verfügbar macht. Er wird in IIS ausgeführt, weil er HTTPS-Endpunkte benötigt. Die meisten Operationen werden innerhalb von Sekunden oder weniger ausgeführt. Eine oder zwei dieser Operationen benötigen jedoch zwischen 5 und 90 Minuten.
Der Hauptkonsument dieses Dienstes ist eine ASP.NET MVC-Anwendung. Was ist der richtige Weg, damit umzugehen?
Sollte ich das Timeout erhöhen und einige Ajax-Anrufe machen? Sollte ich meiner Datenbank eine Tabelle hinzufügen, und die lang laufenden Operationen diese Datenbank aktualisieren, und die Webschnittstelle diese Tabelle jede Minute abfragen lassen? Ich bin mir nicht sicher, was (sofern vorhanden) die allgemein anerkannte Best Practice dafür ist.
Ich habe etwas Ähnliches für mein Senior-Projekt geschrieben, im Grunde ein Job-Scheduling-Framework.
Der Manager-Dienst würde die Warteschlange aus der Datenbank lesen und die Arbeit an alle meine "Worker-Hosts" verteilen. Der Grund, warum ich den Windows-Dienst diese Aufgabe ausführte, anstatt die UI direkt mit dem Worker-Host zu kommunizieren, war, weil es eine zusätzliche Kontrolle über den gesamten Prozess gab.
Ich mochte nicht die Idee, dass "das Netzwerkkabel ausgesteckt wurde" von meinem Worker-Host, und nie wieder eine Statusaktualisierung von diesem bestimmten Job erhalten würde. Der Windows-Dienst gibt mir die Möglichkeit, den Fortschritt des WCF-Worker-Hosts ständig zu überwachen, und wenn ein Verbindungsfehler jemals auftritt (oder etwas Unerwartetes), kann ich den Status als fehlgeschlagen markieren. Also, keine verwaisten Jobs.
Schauen Sie sich das an
WCF-Operationen mit langer Laufzeit Es könnte andere Optionen geben, aber sie sind fast gleich. Sie können auch einige Push-Benachrichtigungen (ich nehme an, keine Daten werden zurückgegeben) als eine int der folgenden Link