Wie soll eine ASP.NET-Anwendung mit unbehandelten Ausnahmen umgehen, die bei einem nicht angeforderten Hintergrundthread auftreten (aufgrund von Fehlern)?
Standardmäßig führen solche Ausnahmen dazu, dass der Prozess beendet wird. Bei der Einstellung eines ASP.NET-Arbeitsprozesses ist dies nicht akzeptabel, da gleichzeitig ausgeführte Anforderungen unvorhersehbar abgebrochen werden. Es ist auch ein Leistungsproblem.
Ausnahmen in einem Anforderungs-Thread stellen kein Problem dar, da ASP.NET sie behandelt (indem eine Fehlerseite angezeigt wird).
Das Ereignis AppDomain.UnhandledException
ermöglicht es zu beobachten, dass eine Ausnahme aufgetreten ist, aber die Beendigung kann zu diesem Zeitpunkt nicht verhindert werden.
Hier ist ein Repro, der in eine ASPX-Seitencodebehind eingefügt werden muss.
%Vor%Die einzige Lösung, die ich kenne, ist, niemals eine Ausnahme unbehandelt "entkommen" zu lassen. Gibt es dafür eine andere, globalere und gründlichere Lösung?
Rx (Reactive Programming) wurde geboren, um solche Probleme zu lösen, versuchen Sie, das Framework, das Sie gerade verwenden, zu ändern und es durch Rx zu ersetzen.
Die Nugget-Pakete:
Dies ist der äquivalente Rx-Code:
%Vor% Wie Sie sehen können, wird der Fehler nicht aus dem Hintergrundthread entfernt, wenn Sie einen -Handler für den Fehler , onError => { }
Wenn Sie keinen Fehlerhandler angeben, wird die Ausnahme weitergegeben:
%Vor%Im obigen Beispiel wird die Ausnahme weitergegeben und verursacht die gleichen Probleme wie Ihr veröffentlichter Code
Sie können die Ausnahme so markieren, wie sie in einem unbehandelten Exception-Handler behandelt wird. Ссылка
Dies sollte verhindern, dass der Worker-Prozess aufgrund eines Fehlers im Hintergrund-Thread wiederverwendet wird.
Sie würden das jedoch nicht für alle Ausnahmen tun. Nur diejenigen, die Sie kennen, können Sie ignorieren.
Ich denke, "legacyUnhandledExceptionPolicy" -Option ist Ihre Antwort.
Nicht behandelte Ausnahmen, die dazu führen, dass ASP.NET in .NET 2.0 abstürzt ; Ссылка
Tags und Links .net multithreading asp.net exception unhandled-exception