Próbuję przechwycić wszystkie nieobsługiwane wyjątki w mojej roli pracownika. Próbowałem wstawić blok try
- (zgodnie z sugestią here), ale bez powodzenia.Jak wychwycić nieobsługiwany wyjątek w usłudze Windows Azure (Worker) Rola
public override void Run()
{
try
{
base.Run();
}
catch (Exception ex)
{
Trace.TraceError("Unhandled Exception: {0}", ex);
throw ex;
}
}
Rola gospodarzem usług WCF, więc nie ma innej logiki wewnątrz metody Run()
. Czy istnieje jeszcze możliwość wychwycenia wyjątków na tym poziomie?
Update 1 W celu wyjaśnienia problemu: Rola samo gospodarzem usługę WCF (zainicjowany w OnStart()
) gdzie niektóre operacje są operacjami tle. Gdy usługa jest wywoływana i ta metoda zgłasza nieoczekiwany wyjątek, lubię to przechwycić, aby zapisać go w dzienniku.
Rozwiązanie: Oczywiście to jest jak w normalnej aplikacji C#: Wystarczy dodać do obsługi zdarzenia UnhandledException
jak ten
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
wewnątrz OnStart()
roli. Byłem tak bardzo skoncentrowany na platformie Azure, że nie mogłem w końcu działać, nawet go nie wypróbowałem :-)
Wypróbuj to z rolą robotyczną, która po prostu wyrzuca 'nowy wyjątek (" Testowanie ");' –
Rola jest hostem usługi WCF, więc nie ma nic naprawdę w metodzie Run(). Powinienem o tym wspomnieć. – gumo
@ gumo: ok, a następnie dodaj rzut przed bazą.Run. –