2011-01-07 4 views
9

Ich versuche, alle nicht behandelten Ausnahmen in meiner Worker-Rolle abzufangen. Ich habe versucht, eine try - catch Block in die Run() Methode (wie vorgeschlagen here), aber mit keinem Erfolg.So fangen Sie eine nicht behandelte Ausnahme in Windows Azure (Worker) Rolle

public override void Run() 
{ 
    try 
    { 
    base.Run(); 
    } 
    catch (Exception ex) 
    { 
    Trace.TraceError("Unhandled Exception: {0}", ex);  
    throw ex; 
    } 
} 

Die Rolle beherbergt einen WCF-Dienst, so dass es keine andere Logik innerhalb der Run() Methode. Gibt es eine weitere Möglichkeit, Ausnahmen auf dieser Ebene zu erfassen?

Update 1 das Problem zu klären: Die Rolle selbst beherbergt einen WCF-Dienst (initialisiert in OnStart()), wo einige Operationen Operationen Hintergrund sind. Wenn der Dienst aufgerufen wird und diese Methode eine unerwartete Ausnahme auslöst, möchte ich die Nachricht abfangen, um sie in das Protokoll zu schreiben.

Lösung: Offensichtlich ist es wie in einer normalen C# Anwendung: nur einen Handler zum ähnlichen

AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

innerhalb der OnStart() der Rolle UnhandledException Ereignis hinzuzufügen. Ich war so konzentriert auf Azure, dass ich dachte, das könnte doch nicht funktionieren, dass ich es nicht einmal versucht habe :-)

+0

Versuchen Sie dies mit einer Dummy-Worker-Rolle, die einfach eine neue Exception ("Testing") auslöst; ' –

+0

Die Rolle hostet einen WCF-Dienst, sodass sich nichts wirklich in der Run() -Methode befindet. Sollte das erwähnt haben. – gumo

+0

@gumo: ok, dann füge den Wurf vor der Basis hinzu.Run. –

Antwort

14

Wie bereits in meiner Frage aktualisiert, hier aus Gründen der Vollständigkeit als Antwort:

Offensichtlich ist es wie in einer normalen C# Anwendung: Nur einen Handler auf die ähnlichen

AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); 

innerhalb UnhandledException Veranstaltung hinzufügen die OnStart() der Rolle.

0

Der Haken fängt alle Ausnahmen.

Sie werfen es wieder, so dass man nicht gefangen wird.

Auch Sie protokollieren, aber Protokolle sind nicht standardmäßig in Azure aktiviert, da sie kosten.

Die andere Alternative ist, dass es keine Ausnahme gibt.

Verwandte Themen