Jak radzić sobie z niskimi poziomami błędów WCF?

Mam standardowy błąd w mojej usłudze:

Mam usługę IErrorHandler podłączoną do usługi, aby obsłużyć nieoczekiwane błędy podczas wykonywania usługi.Mam try / catch bloki we wszystkich moich metodach obsługi do obsługi oczekiwanych przypadków.

Istnieją jednak przypadki, w których wyjątki są rzucane na serwer i żadne z nich nie jest wywoływane.

Oto przypadek, w którym wyjątek serwera nie jest wysyłany do IErrorHandler:

Ustaw powiązanie receiveTimout na serwerze na 5 sekund.

Na kliencie:

.

Service1Client sc = new Service1Client();
ICommunicationObject o = sc as ICommunicationObject;

o.Open(); // open channel

sc.GetData(10); // do a first call

Thread.Sleep(10000); // wait longer than the server receiveTimeout

sc.GetData(10); // Attempt another call: server throws a FaulException

W takim przypadku błąd jest zgłaszany na serwerze, ale nie mogę znaleźć sposobu, aby go obsłużyć (i zalogować). Wiem, że zgłoszony został błąd, ponieważ jeśli podłączę debugger do procesu serwera i przerwie wszystkie wyjątki, debuger zostanie przerwany.

Znalazłem inne podobne przypadki, w których błędy niskiego poziomu nie są przekazywane do mojego programu.

Gdzie mogę podłączyć mój kod, aby upewnić się, że mogę obsłużyć WSZYSTKIE wyjątki, które występują na serwerze, zanim zostaną zwrócone do aplikacji klienta? Czy powinienem zaimplementować mój własny IChannel lub inny niski poziom interfejsu?

Dzięki

AKTUALIZACJA 21 września 2009 r: Widziećto wątek na forum Microsoft WCF. Prawdopodobnie będę musiał zaimplementować mój własny kanał, jeśli chcę obsłużyć ten wyjątek. Zaktualizuję ten wpis ponownie, gdy będę miał więcej informacji.

questionAnswers(4)

yourAnswerToTheQuestion