2009-04-02 11 views
1

Ich schreibe einen WCF-Webdienst und frage mich, ob es eine elegante (aspektorientierte) Möglichkeit gibt, den Interceptor-Mechanismus von Castle zu verwenden, um von meinem Web ausgelöste Ausnahmen zu protokollieren Methoden? Ich kenne die IInterceptor Schnittstelle, aber ich konnte dort keine Ausnahmeinformationen finden.Verwenden von Castle zum Protokollieren von ausgelösten Ausnahmen in WCF (und anderen)

Ich habe Castle, AOP and Logging in .NET gesehen, aber es deckt nur die Parameter der Methode ab.

Gibt es einen besseren (WCF oder Castle) Mechanismus dafür? Übrigens verwende ich log4net für die Protokollierung.

UPDATE: Ich kenne die Protokollierungsfunktionen von WCF, aber ich habe mehr nach einer allgemeinen Lösung gesucht, nicht nur in der WCF-Umgebung.

Vielen Dank im Voraus.

Antwort

1

Sie sollten die integrierte WCF-Ablaufverfolgung und Protokollierung verwenden. Dann können Sie den WCF-Trace-Viewer verwenden, der Protokolle von Service und Client zusammenfügt, sodass Sie den vollständigen Nachrichtenfluss sehen können.

http://www.devx.com/dotnet/Article/37389/0/page/6

Es ist die IErrorHandler Schnittstelle in WCF:

public interface IErrorHandler 
{ 
    bool HandleError(Exception error, MessageFault fault); 
    void ProvideFault(Exception error, ref MessageFault fault, ref string faultAction); 
} 

Weitere Details hier: http://www.extremeexperts.com/Net/Articles/ExceptionHandlingInWCF.aspx

+0

Ok, aber lassen Sie uns die Frage verallgemeinern: Wie würdest du es in einer Nicht-WCF-Umgebung machen? –

+0

Ich habe meine Antwort aktualisiert. –

2

Wenn Sie Castle Interceptor im Allgemeinen verwenden möchten, können Sie etwas tun könnte:

public void Intercept(IInvocation invocation) 
{ 
    //do some preprocessing here if needed 
    try 
    { 
     invocation.Proceed() 
    } 
    catch(Exception e) 
    { 
     LogException(e); 
     throw; 
    } 
    finally 
    { 
     //do some postprocessing jf needed 
    } 
}