2017-08-29 3 views
2

Ich habe eine .NET Web API-Anwendung vor ca. 2 Wochen in einem IIS 8.0 bereitgestellt.IIS ShutDownTimeLimit Retriggering-Web-API-Controller Aktion

Es gibt eine lange ausstehende Methode, die einen Großteil der Dinge asynchron verarbeiten wird, und es kann ~ 20/30 Minuten dauern (der Client kann entweder die Anwendung schließen und eine E-Mail mit den Ergebnissen erhalten oder auf dem Bildschirm warten bis der Prozess endet).

Das Problem ist aufgetreten, nach 90 Sekunden warten auf die Antwort, der Anruf hängt und wiederholen Sie den gleichen Aufruf erneut, so zum Beispiel: Ich versuche, 15 Elemente zu verarbeiten (in DB einfügen) und nach 90 Sekunden den Prozess hängt und es beginnt wieder (Einfügen von weiteren 15 Datensätze), und schließlich der ganze Prozess hängt nur und nie zu Ende.

Nach langem googeln und Nachforschung konnte ich feststellen, dass der Anwendungspool ShutDownTimeLimit für den IIS tatsächlich meinen Anruf tötete, weil er im Leerlauf war und keine Antwort innerhalb der Standardzeit (das sind 90 Sekunden)). Ich habe den Wert erhöht und das hat mein Problem im Grunde genommen gelöst.

Ich bin mir jedoch immer noch nicht sicher, warum die Aktion auf meinem Controller erneut ausgelöst wurde. Weiß jemand von Ihnen, ob es möglich ist, dass der IIS den Anruf tatsächlich erneut versucht, nachdem er festgestellt hat, dass das ShutDownTimeLimit überschritten wurde?

Jede Hilfe wäre willkommen.

PD: Meine Frontend macht nur 1 genauen Anruf, es gibt keine Mehrfachanrufe von ihm.

+0

Ich erfahre genau dasselbe Problem. Haben Sie jemals herausgefunden, warum der Controller neu ausgelöst wurde? –

Antwort

0

Selbst wenn das ShutDownTimeLimit überschritten wurde, werden alte Worker-Prozesse ordnungsgemäß beendet (Anforderungsverarbeitung beenden), wenn die Zeit für das Herunterfahren lange genug ist, um dies zu ermöglichen. Wenn jedoch das Shutdown-Zeitlimit erreicht ist, kann ein neuer Worker-Prozess gestartet werden, wenn eine weitere Anforderung vorhanden ist. Und ich glaube nicht, dass IIS den Anruf wiederholen wird (und ich habe es getestet). Stellen Sie also sicher, dass kein anderer Anruf vom Frontend oder irgendwo kommt. Übrigens, es ist keine gute Idee, im Wesentlichen lange laufende Feuer-und-Vergessen-Aufgaben innerhalb eines ApiControllers zu starten, weitere Informationen unter this question.