2009-08-20 4 views
0

Ich habe einen kleinen WCF-Dienst entwickelt, der HTTP-Anforderungen verarbeitet.Fügen Sie alle internen Serverfehler in Windows-Ereignisprotokoll ein

Ich möchte von jedem Fehler bewusst sein, was geschieht:

  • alles, was 500 Internal Server Error aus den Verträgen verursacht
  • alles anzeigen, die eine Communication verursacht von den Bindungen sehen (Ich habe eine schriftliche benutzerdefinierte aber ich benutze auch Standard)

Die Fehler sollten in das Windows-Ereignisprotokoll eingegeben werden.

Meine Frage ist:

  • Gibt es eine Möglichkeit, einen zentralen Event-Handler für den gesamten WCF-Stack, der alle Ausnahmen erfaßt hinzuzufügen und druckt sie in das Ereignisprotokoll?

Grüße.

Antwort

1

Auf der Serverseite - ja, wie John schon darauf hingewiesen hat, können Sie grundsätzlich die IErrorHandler Schnittstelle in Ihrer Serviceklasse implementieren und alle Fehler auf dieser Seite erfassen.

jedoch auf der Client-Seite, werden Sie nur verwenden, um try {...} catch {...} gute alte .NET alle Service zu sichern, fordert - nach allem, könnten Sie möglicherweise

  • Anruf ein Server, der überhaupt nicht existiert alle
  • Anruf ein Server, der
  • loses Netzwerk connectitivity vorübergehend nicht verfügbar ist (Typ mit einem großen Bulldozer schneiden Ihr Netzwerk Draht :-))
  • mehr dieser Art von Dingen

Diese wären CommunicationExceptions (oder Nachkommen davon) und müssen auf der Client-Seite behandelt werden, wenn sie passieren.

So können Sie die Server-Seite der Dinge zentral behandeln (zumindest solange die Nachricht zu Ihrer Serviceklasse gelangt ist und gerade verarbeitet wird) - alles andere muss separat behandelt werden.

Marc

+0

Ich habe ein „throw new Communication (“ Fehler passiert „)“ in das ReceiveRequest Verfahren des benutzerdefinierten Bindung des Kanals eingesetzt ist. Der benutzerdefinierte Fehlerhandler wurde über "foreach (ChannelDispatcher cd in h.ChannelDispatchers) eingefügt. {Cd.ErrorHandlers.Add (new MyErrorHandler());} Allerdings wird mein benutzerdefinierter Fehlerhandler zu keiner Zeit aufgerufen. – Etan

+0

Ich denke, Sie "Ich werfe zu früh! :-) Wenn ich mich richtig erinnere, startet die IErrorHandler-Schnittstelle erst dann, wenn der Dispatcher auf der Serverseite die Nachricht an die Methode eines Dienstobjekts gesendet hat. Alles, was davor steht, wird direkt an den Client –

+0

gesendet die "neue CommunicationException (" error ")" in die Implementierung des Vertrags werfen wird auch nicht funktionieren. Welche Ausnahmen werden vom Fehlerhandler behandelt, wenn nicht die vor dem Versand und nicht die nach dem Versand? – Etan