Wie läuft der lang andauernde Prozess asynchron unter asp.net?

7

.net 4.5, asp.net mvc: Was ist der beste Weg, lang anhaltende Prozess (1-2 Minuten) von ASP.NET-Anwendung zu laufen, sollte es in einer single-threaded-Umgebung ausgeführt werden, ich meine den Prozess Wird nur für jeweils einen Benutzer gestartet, müssen die Ausführungen für alle anderen Benutzer warten, bis die aktuelle Ausführung abgeschlossen ist? Das Szenario ist das Folgende: Der Benutzer klickt auf die Schaltfläche, die eine Art langanhaltender Berechnungen ausführt. Die HTTP-Antwort wird sofort an den Benutzer zurückgegeben. Anschließend muss der Benutzer den Status der Berechnungen mit einer separaten Anforderung manuell anfordern. Asp.net http Sitzung Abtreibung sollte nicht zum Abschluss des Prozesses führen, sollte es weitergehen. Der Prozess wird möglicherweise auf demselben oder einem anderen Server ausgeführt.

    
YMC 23.10.2012, 20:34
quelle

3 Antworten

3

Ich würde vorschlagen, ein Produkt wie NServiceBus zu verwenden, um die Verarbeitung zu entladen und es im Singlethread-Modus auszuführen. Der Vorteil besteht darin, dass alle Anfragen in der richtigen Reihenfolge bearbeitet werden und die Verarbeitung vom Web-Server ausgeladen werden kann, da lange laufende Prozesse auf einem Webserver nicht wirklich stattfinden sollen.

    
Trevor Pilley 23.10.2012, 20:44
quelle
12

Ich zeige Ihnen, wie Sie diese Aufgabe mit Ссылка erledigen können - eine unglaublich einfache Möglichkeit, um Aufgaben zu erledigen, bei denen es sich um "Feuer-und-vergessen", verzögerte und wiederkehrende Aufgaben handelt ASP.NET-Anwendungen. Kein Windows-Dienst erforderlich.

Installieren Sie zuerst das Paket über NuGet. Wenn Sie Probleme haben, lesen Sie bitte den Quick Start Leitfaden in der offiziellen Dokumentation.

> %Vor%

Öffnen Sie Ihre OWIN-Startup-Klasse und fügen Sie die folgenden Zeilen hinzu:

%Vor%

Schreiben Sie dann die Methode, die die lang andauernde Arbeit ausführt (Ich habe das Attribut angewendet, um jeweils nur eine Methode auszuführen):

%Vor%

Und dann rufen Sie eine Methode im Hintergrund als Fire-and-Forget auf Benutzer sofort reagieren:

%Vor%

Wenn Sie einen Benutzer über den Abschluss von Jobs informieren möchten, sollten Sie SignalR in Betracht ziehen und die Methode LongRunning entsprechend anfügen.

    
odinserj 09.06.2014 07:31
quelle
4

.Net 4.5.2 fügt QueueBackgroundWorkItem hinzu kann zum Planen einer Aufgabe verwendet werden. Wenn Sie den Server nicht steuern (wenn er neu gestartet wird), funktioniert die 90-Sekunden-Standardverzögerung des Herunterfahrens von appPool nicht (es sei denn, Sie können feststellen, dass der Task nicht abgeschlossen wurde und auf einem anderen Server ausgeführt wird). Weitere Informationen finden Sie unter " QueueBackgroundWorkItem, um Hintergrundprozesse in ASP.NET zuverlässig zu planen und auszuführen "

    
RickAndMSFT 06.06.2014 04:45
quelle