4 Stimmen

Wie man die vom Server zu erledigende Arbeit in eine Warteschlange stellt ASP.NET

Wir haben einen CSV-Uploader, mit dem Benutzer eine CSV-Datei mit Adresse, Stadt, Bundesland und Postleitzahl hochladen können. Die CSV-Dateien können Hunderte, Tausende oder sogar Zehntausende von Zeilen umfassen.

Wir müssen die Zeilen geokodieren; kein Problem, wir verwenden Google Maps RESTFul Web Service, aber ich möchte den Benutzer nicht warten lassen, während wir jede Zeile geokodieren (es kann einige Zeit dauern). Im Grunde möchte ich, dass der Upload abgeschlossen ist und dann auf magische Weise den Geokodierungsauftrag an den Server weitergegeben wird, so dass der Benutzer weiterhin in der Webanwendung navigieren kann, während die Geokodierung im Hintergrund erfolgt.

Ich denke, dieses System erfordert eine Warteschlangen- oder Job-basierte Software; vielleicht ZeroMQ oder RabbitMQ? Ich habe keine Erfahrung damit, also wäre es toll, wenn Sie mir ein paar Tipps geben könnten. Wir sind mit ASP.NET C#.

3voto

Jacob Punkte 75084

Ihre Idee, Warteschlangen zu verwenden, ist gut. WCF mit MSMQ-Endpunkten ist eine Alternative zu Warteschlangentechnologien von Drittanbietern, wenn Sie für Windows-Systeme entwickeln.

2voto

Andrew M Punkte 8769

Dies sollte möglich sein, indem Sie einen neuen Thread erstellen, an den Sie die Geokodierungsarbeit weitergeben, und dann die Seitenantwort wie gewohnt an den Benutzer zurückgeben. Diese Frage betrifft weitgehend das gleiche Problem.

Sie könnten etwas wie folgt versuchen:

ThreadPool.QueueUserWorkItem(delegate {
    DoGeocoding(state details);
});

Es kann sein, dass Sie danach Response.Flush aufrufen müssen, um die aktuelle Seitenanforderung zurückzugeben und es dem Benutzer zu ermöglichen, mit dem Browsen fortzufahren.

1voto

mbeckish Punkte 10318

Eine Alternative zur Warteschlangensoftware wäre die Verwendung einer Datenbank, um die CSV-Verarbeitungsanforderungen zu verfolgen.

Ihr CSV-Verarbeitungscode kann die Tabelle aktualisieren, wenn sich der Status der einzelnen Anträge ändert.

Ihre ASP.NET-Website kann die Tabelle abfragen, um den Status jeder Anfrage für die Benutzer anzuzeigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X