Unsere Protokolle melden ThreadAbortException
s, die unsere Quartz.NET-Jobs in scheinbar zufälligen Intervallen stoppen. Soweit ich weiß, würde dies normalerweise nicht durch etwas verursacht werden, das der Thread selbst tut (z. B. Lesen einer Datei von einem FTP-Server oder Ausführen einer LINQ to Entities-Abfrage), sondern weil ein äußerer Prozess dem Thread sagt, dass er aufhören soll . Außerdem führt die Art und Weise, wie die Logs erstellt werden, zu der Annahme, dass die gesamte Webanwendung neu gestartet wird, wenn diese Fehler auftreten. Daher vermute ich, dass der Neustartprozess dazu führt, dass der Thread überhaupt abgebrochen wird.Wie kann ich herausfinden, warum mein Thread in ASP.NET gestoppt wird?
Also meine Frage ist: Wie kann ich herausfinden, warum der Server/Anwendung neu gestartet wird? Gibt es irgendwo Protokolle, die mir bei jedem Neustart Details geben würden? Gibt es gemeinsame Ursachen für so etwas, das ich untersuchen sollte?
Vielen Dank im Voraus für Ihre Hilfe.
bearbeiten
Ich hatte gerade ein Gespräch mit einigen Kollegen, und es klingt wie automatisch IIS die Anwendung setzt nach einer gewissen Zeit der Inaktivität in den Schlaf, die einen Teil des Problems sein könnten. Mit einigen Nachforschungen habe ich eine Einstellung für "Idle Timeout" für Worker-Threads in IIS gefunden. Ich denke, wenn die Anwendung für einen bestimmten Zeitraum keine Anforderungen bearbeitet hat, gibt sie einen Befehl zum Herunterfahren aus. Aus irgendeinem Grund wird Quartz nicht sofort heruntergefahren, sondern wartet darauf, dass der nächste Job ausgelöst wird, und dann erkennt das System den Thread des Jobs und tötet ihn, während er versucht, ausgeführt zu werden.
Also ich denke, wir müssen einen Weg finden, um alle laufenden Jobs anmutig zu beenden, wenn das System herunterfahren will, und Quartz tatsächlich heruntergefahren, wenn es gesagt wird, wenn es keine Aufträge ausführt. Hat jemand Erfahrung mit dieser Art von Problem?
Durchforschen Sie Response.Redirects in Ihrem Code? –
Nein, dies geschieht nicht während einer Anfrage. Es passiert als Teil eines Quarz-Jobs. – StriplingWarrior
Hi StriplingWarrior, Wir haben genau die gleichen Probleme, die Sie beschreiben. Wenn der ApplicationPool die Quartz-Jobs erneut verarbeitet, erhalten sie eine ThreadAbortException, und nach dem zweiten Recycling laufen die .net-Quarzjobs nicht mehr. Haben Sie die Probleme gelöst? Wenn ja, würde ich mich freuen, wenn Sie kurz beschreiben könnten, wie. Vielen Dank im Voraus, Enric –