2017-03-20 3 views
0

Ich habe eine lange laufende Aufgabe auf meiner Anwendung, die etwa 4/5 Stunden dauert, um abzuschließen. Diese Task ruft Daten von einem CUBE-Datenserver für Hunderte von Kombinationen ab, indem sie durch die Schleife iteriert.ASP.NET-Code-Ausführung hält nach bestimmter Zeit auf IIS

Es funktioniert gut, während ich es aus meinem lokalen Visual Studio 2015 ausführen, aber wenn ich es auf unserem Anwendungsserver bereitstellen, wird dieser Prozess automatisch nach 25/30 Minuten angehalten. Wie ich vom CUBE-Server überwache kann ich sehen, dass nach 25/30 Minuten kein Datenanruf dort ankommt.

Ich hatte versucht, in web.config die folgenden und setzen Sitzung Zeitüberschreitung auf 20 Stunden von IIS aber nichts funktioniert, wie die Datenaufrufe nach einer bestimmten Zeit anhält und nicht vollständig abgeschlossen.

executionTimeout = "86400"

Der Code unten-

Task.Factory.StartNew gegeben hat (() => RunManufacturerModuleCache(), TaskCreationOptions.LongRunning);

Wo RunManufacturerModuleCache() Methode eine for-Schleife von 1000 Iterationen aufweist und jede Iteration ruft Daten von einem Würfel-Server.

Gibt es irgendwelche Einstellungen, die die Ausführungszeit in IIS verlängern können, die ich vermisse oder es gibt keine Möglichkeit, einen Ausführungsprozess größer als 25/30 Minuten in IIS auszuführen? Vielen Dank!

Antwort

1

IIS hat einen Anwendungspool-Leerlauf-Timeout (Standard ist 20 Minuten). Gehen Sie einfach zu den Anwendungspools in IIS, klicken Sie mit der rechten Maustaste auf Ihren Anwendungspool und "Erweiterte Einstellungen". Sie werden sehen, dass es eine Einstellung namens "Idle Time-Out (Minuten)" gibt. Setzen Sie den Wert auf 0, wenn der App-Pool nicht automatisch heruntergefahren werden soll, wenn lange Zeit keine Anfragen eingehen.

Alternativ können Sie alle paar Minuten eine Anfrage an die Anwendungshomepage (oder eine einfache Seite) senden, um den App-Pool wach zu halten.

Ps. Soweit Best Practices gehen, sollten Sie nicht lange laufende Aufgaben in die Request-Processing-Pipeline stellen. Stattdessen sollten Sie einen separaten Dienst (Windows-Dienst, Azure WebJob usw.) erstellen, um lange laufende Aufgaben auszuführen, aber das ist eine separate Diskussion.

+0

Danke, Ihre erste Lösung, d. H. Einstellung 0 bis Leerlauf (Minuten) funktioniert für mich! –

Verwandte Themen