Wie können Sie lange laufende Servicevorgänge mit WCF, das in IIS gehostet wird, richtig behandeln?

9

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.

    
Nate 18.06.2012, 17:19
quelle

2 Antworten

1

Ich habe etwas Ähnliches für mein Senior-Projekt geschrieben, im Grunde ein Job-Scheduling-Framework.

  1. Ich wählte den Pfad zum Speichern des "Status" des "Jobs" in der Datenbank.
  2. Ich habe einen Manager-Windows-Dienst geschrieben, der einen WCF-Client (Proxy) implementiert hat
  3. Ich habe einen WCF-Dienst geschrieben, der meinen "worker host" implementiert hat.

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.

    
Localghost 18.06.2012, 17:35
quelle
0

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

WCF Push

    
Tabish 18.06.2012 17:32
quelle

Tags und Links