Wie behandelt man unbehandelte Thread-Ausnahmen in ASP.NET?

8

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?

    
usr 20.06.2012, 10:03
quelle

3 Antworten

0

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 => { }

angeben

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

    
Jupaol 20.06.2012 10:17
quelle
0

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.

    
Wonko 01.07.2015 19:35
quelle
0

Ich denke, "legacyUnhandledExceptionPolicy" -Option ist Ihre Antwort.

Nicht behandelte Ausnahmen, die dazu führen, dass ASP.NET in .NET 2.0 abstürzt ; Ссылка

    
SeongTae Jeong 09.10.2015 06:18
quelle