Frage

In meiner Web-Anwendung gibt es einen Prozess, die Daten aus dem ganzen Web-Abfragen, filtert sie und speichert sie in die Datenbank. Wie Sie diesen Prozess vorstellen kann dauert einige Zeit. Meine aktuelle Lösung ist die Seite Timeout zu erhöhen und eine AJAX-Statusanzeige für den Benutzer geben, während es lädt. Dies ist ein Problem aus zwei Gründen -. 1) dauert es noch lange, und der Benutzer muss warten 2) es manchmal noch mal aus

Ich habe in Einfädeln des Prozesses dabbled und habe ich async es zu einem Web-Service ( "Fire and Forget") abgeben sollte.

Einige Referenzen, die ich gelesen habe:
- MSDN
- Fire and Forget

Also meine Frage ist - was die beste Methode ist,

UPDATE:. Nachdem der Benutzer seine Daten eingibt, würde Ich mag sie auf die Ergebnisseite umzuleiten, die inkrementell aktualisiert, da der Prozess im Hintergrund läuft

War es hilfreich?

Lösung

übermäßige Architektur Astronomie Um zu vermeiden, habe ich oft jsProgressBarHandler , können Sie ziemlich einfach erstellen große Out-of-Band Fortschrittsanzeige für mehr Aufgaben, bei denen eine allgemeinen Fortschritt Animation nicht schneiden.

In Ihrer spezifischen Situation können Sie pro Aufgabe einen LongRunningProcess.aspx Aufruf verwenden, diese Seite Timeouts zu vermeiden.

Zum Beispiel ruft LongRunningProcess.aspx? TaskID = 1 es zum Auftakt und dann am Ende dieser Aufgabe emittieren a

document.location = "LongRunningProcess.aspx?taskID=2".  

bis zum Überdruss.

Andere Tipps

Wir hatten ein ähnliches Problem und löste es durch die Arbeit über einen asynchronen Web-Service-Aufruf starten (was bedeutet, dass der Benutzer muss nicht warten, bis die Arbeit zu beenden). Der Web-Dienst gestartet, um eine SQL-Job, der die Arbeit durchgeführt und aktualisiert regelmäßig eine Tabelle mit dem Stand der Arbeiten. Wir stellten eine Benutzeroberfläche, die dem Benutzer erlaubt, die Tabelle abzufragen.

Ich lief in genau dieses Problem bei meinem letzten Job. Der beste Weg, ich fand, war ein asychronous Prozess abzufeuern, und den Benutzer benachrichtigen, wenn es (E-Mail oder etwas anderes) getan hat. sie machen so lange warten wird problematisch sein, weil von Timeouts und verschwendet Produktivität für sie. sie warten auf einen Fortschrittsbalken zu haben, kann ihr falsches Gefühl der Sicherheit geben, dass sie den Vorgang abbrechen kann, wenn sie den Browser zu schließen, die nicht der Fall sein können, je nachdem, wie Sie das System einrichten.

  1. Wie abfragen, um die Remote-Daten?
  2. Wie oft kommt es ändern?
  3. Sind die Ergebnisse etwas, das für einen bestimmten Zeitraum zwischengespeichert werden?
  4. Wie lange eine Zeit sind wir eigentlich hier besprochen?

Die ‚beste Methode‘ wird wahrscheinlich in irgendeiner Weise auf die Antworten auf diese Fragen hängen ...

Sie können einen anderen Thread erstellen und speichern Sie einen Verweis auf das Gewinde in der Sitzung oder Anwendungszustand, je nachdem, ob der Faden pro Webseite nur einmal ausgeführt werden kann, oder einmal pro Benutzersitzung.
Sie können dann den Benutzer auf eine Seite umgeleitet, wo er die Themen Fortschritte überwachen. Sie können die Seite automatisch zu aktualisieren, oder eine Refresh-Button für den Benutzer anzuzeigen.
Nach Abschluss des Themas, können Sie eine E-Mail an den Benutzer senden.

Meine Lösung dieses Problems, wurde aus Band-Dienst ein, dass diese funktioniert und speichert sie in db.

Wenn die Person, um etwas bittet das erste Mal, bekommen sie ein wenig warten, und dann nach oben zeigt es aber, wenn sie aufzufrischen, seine unmittelbare und dann, weil sein int er db, seinen jetzt Teil des stündlichen Update für die nächsten 24 Stunden nach der letzten Anfrage.

Fügen Sie den Job mit ihren relevanten Parametern, zu einem Job Queue-Tabelle. Dann schreibt einen Windows-Dienst, der diese Arbeitsplätze abholen und verarbeiten sie, um die Ergebnisse zu einem geeigneten Ort speichern und per E-Mail den Anforderer mit einem Link zu den Ergebnissen. Es ist auch eine nette Geste irgendeine Art von UI zu geben, so dass der Benutzer den Status ihrer Arbeit überprüfen (s).

Auf diese Weise ist viel besser als einen eigenen Thread gestartet oder das Timeout zu erhöhen, vor allem, wenn Ihre Anwendung größer ist und skalieren muss, wie Sie einfach mehr Server Jobs hinzufügen kann bei Bedarf bearbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top