2011-01-07 8 views
9

내 작업자 역할에서 처리되지 않은 예외를 모두 잡으려고합니다. try - catch 블록을 Run() 방법 (제안 된대로, here)으로 넣으려고했으나 성공하지 못했습니다.Windows Azure (Worker) 역할에서 처리되지 않은 예외를 catch하는 방법

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

역할은 WCF 서비스를 호스팅하기 때문에 Run() 방법 내부에는 다른 논리가 없다. 이 수준에서 예외를 잡을 다른 가능성이 있습니까? 1

업데이트 문제를 명확히하기 : 역할 자체는 일부 작업은 배경 작업입니다 (OnStart() 초기화) WCF 서비스를 호스팅합니다. 서비스가 호출되고 해당 메서드가 예기치 않은 예외를 throw하면이를 로그에 기록하기 위해이 메서드를 catch합니다.

솔루션 : 은 분명히 정상적인 C# 응용 프로그램에서 같다 : 그냥 역할의 OnStart() 안에이

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

처럼 UnhandledException 이벤트 핸들러를 추가합니다. 나는 Azure에 너무 집중하여 결국이 작업을 할 수 없다고 상상했는데, 심지어 시도하지도 않았다. :-)

+0

단순히 'new Exception ("Testing");을 던져주는 더미 작업자 역할로 시도하십시오 –

+0

역할은 WCF 서비스를 호스팅하므로 실제로 Run() 메소드 안에 아무것도 없습니다. 언급 했어야했다. – gumo

+0

@ gumo : ok, base.Run 앞에 던지기를 추가하십시오. –

답변

14

는 이미 답변으로 완성도를 위해서 여기, 내 질문에 업데이트 : 분명히

그것은 정상적인 C# 응용 프로그램에서 같다 : 그냥 내이

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

처럼 UnhandledException 이벤트 처리기를 추가 역할의 OnStart().

0

catch는 모든 예외를 catch합니다.

다시 던져서 잡히지 않습니다.

또한 로깅하지만 Azure에서는 기본적으로 로그가 작동하지 않으므로 비용이 발생합니다.

다른 대안은 예외가 아닙니다.

관련 문제