Wie gehe ich mit WCF-Fehlern auf niedriger Ebene um?

Ich habe die Standardfehlerübergabe in meinem Service:

Ich habe einen IErrorHandler mit dem Dienst verbunden, um unerwartete Fehler während der Ausführung des Dienstes zu behandeln.Ich habe Try / Catch-Blöcke in all meinen Dienstmethoden, um erwartete Fälle zu behandeln.

Es gibt jedoch Fälle, in denen Ausnahmen auf dem Server ausgelöst und keine aufgerufen werden.

In diesem Fall wird die Serverausnahme nicht an den IErrorHandler gesendet:

Stellen Sie den receiveTimout auf der Serverbindung auf 5 Sekunden ein.

Führen Sie auf dem Client Folgendes aus:

.

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

In diesem Fall wird der Fehler auf dem Server ausgelöst, aber ich kann keine Möglichkeit finden, damit umzugehen (und ihn zu protokollieren). Ich weiß, dass ein Fehler ausgelöst wird, weil der Debugger bricht, wenn ich einen Debugger an den Serverprozess anhänge und bei allen Ausnahmen aufhöre.

Ich habe andere ähnliche Fälle gefunden, in denen Low-Level-Fehler nicht an mein Programm weitergegeben werden.

Wo kann ich meinen Code einbinden, um sicherzustellen, dass ALLE auf dem Server auftretenden Ausnahmen behandelt werden, bevor sie an die Client-App zurückgegeben werden? Sollte ich meinen eigenen IChannel oder eine andere Low-Level-Schnittstelle implementieren?

Vielen Dank

UPDATE 21. September 2009: Sehendiese Thread auf dem Microsoft WCF Forum. Ich werde wahrscheinlich meinen eigenen Channel implementieren müssen, wenn ich diese Art von Ausnahme behandeln möchte. Ich werde diesen Beitrag erneut aktualisieren, wenn ich weitere Informationen habe.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage