Unhandle Exception Global Handler für OWIN / Katana?
Was ist der richtige Weg zur Verwirklichung einer globalen Exception catcher-handler in einer Katana (OWIN) - Implementierung?
In eine self-hosted-OWIN/Katana-Implementierung ausgeführt als Azure-Cloud-Dienst (worker role), legte ich diesen code in eine Middleware:
throw new Exception("pooo");
Dann setzte ich diesen code in die Startup-Klassen-Konfiguration Methode, festlegen Sie einen Haltepunkt in der Ereignisprozedur:
AppDomain.CurrentDomain.UnhandledException +=
CurrentDomain_UnhandledExceptionEventHandler;
und die event-handler in der gleichen Klasse (mit einem festgelegten Haltepunkt auf die erste Zeile):
private static void CurrentDomain_UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
var exception = (Exception)e.ExceptionObject;
Trace.WriteLine(exception.Message);
Trace.WriteLine(exception.StackTrace);
Trace.WriteLine(exception.InnerException.Message);
}
Wann wird der code ausgeführt, der Haltepunkt erreicht wird. Das Visual Studio Output Fenster enthält diese aber:
A first chance exception of type 'System.Exception' occurred in redacted.dll
A first chance exception of type 'System.Exception' occurred in mscorlib.dll
Ich habe auch versucht, das verschieben der wireup und handler, um die Worker-Rolle OnStart-Methode, aber immer noch der Haltepunkt erreicht wird.
Ich bin nicht mit WebAPI, sondern haben uns auch bei posts auf, was wird dort getan, aber ich fand nichts klar, also hier bin ich.
Läuft .NET Framework 4.5.2, VS 2013.
Alle Ideen geschätzt.
Danke.
InformationsquelleAutor der Frage Snowy | 2015-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, schriftlich eine benutzerdefinierte middleware und stellen Sie es als ersten middleware:
Legen Sie es als ersten middleware:
Wenn wir registrieren diese middleware als der erste mittlere, Ausnahmen von den Entwicklungen in anderen middlewares (unten der stacktrace) vermehren sich und werden gefangen von der
try/catch
block dieser middleware.Es ist nicht zwingend registrieren Sie es als erste middleware, in Fall, dass Sie nicht brauchen Globale Ausnahmebehandlung für manche middlewares, registrieren Sie sich einfach diese middlewares vor dieser.
InformationsquelleAutor der Antwort Khanh TO
@Khanh ' s Antwort ist gut, Schönen knappen code, und gut erklärt.
War es nicht für mich arbeiten. Ich habe eine test-Ausnahme zu einer meiner .NET MVC-Controller wie diesem:
Ausnahme war nicht gefangen in der
Invoke
Methode.Dies ist sehr einfach zu Debuggen:
Für mich, es wurde code Hinzugefügt, um eine
BaseController
überschreibenOnException
. Dieser code wurde die Ausnahme behandelt und nicht erneute auslösen. Ich hoffe, dies ist eine hilfreiche Ergänzung zu @Khanh ' s Antwort.Update
OK, ich weiß, diese Frage ist getaggt mit Web-API, und mein use-case ist .NET, MVC, aber ich fand diese Frage über eine Suche nach Owin-middleware. Wenn ich meine debug-Lösung mit dem test Ausnahme, und beobachten Sie
$exception
in der Einheimischen Ansicht, die Ausnahme ist gegangen, wenn ich wieder in der Owin-middleware. Deshalb habe ich nicht verwendet, den code in @Khanh ' s Antwort. Stattdessen habe ich Hinzugefügt try/catch-Blöcke zu meiner Start-und Global.asax. Ich habe auchOnException
in meinem Basis-controller wie diesem:Diese Antwort wird alle Ausnahmen abzufangen, die auf Anwendung starten und jede Ausnahme in einem controller. Das ist genug für meine Bedürfnisse.
InformationsquelleAutor der Antwort Jess
Versuchen Sie dies:
Und beim Start:
InformationsquelleAutor der Antwort Greg R Taylor