2016-07-08 5 views
1

Für jede WCF-Methode muss eine Protokollnachricht unmittelbar nach dem Aufruf der Methode und eine weitere Protokollnachricht nach dem Ende der Methode vorliegen. Beispielsweise könnte der Code wie folgt aussehen:Generischer Name und Benutzer der Protokollierungsmethode in WCF

public string Method1() 
{ 
    try { 
    Log("Method1 start"); 
    /*implementation is here*/ 
    } 
    finally 
    { 
    Log("Method1 end"); 
    } 
} 

Die zwei Protokolle müssen den Namen der WCF-Methode enthalten. Jetzt muss ich das zu allen WCF-Methoden hinzufügen. Ist es möglich, dass ich dafür eine generische Methode erstellen kann, so dass ich das nicht bei jedem WCF-Aufruf schreiben muss?

Antwort

1

Was Sie suchen, heißt Aspect Oriented Programming.

AOP kommt in verschiedenen Geschmacksrichtungen und behandelt übergreifende Probleme wie Protokollierung.

  • WCF Interception (siehe @Gilad Antwort) ist
  • IoC Interception (ist ein bisschen schwierig zu bekommen mit WCF zu arbeiten, sehen Sie mehr here)
  • Postsharp

Postsharp ein sehr schönes Tool, das AOP zur Build-Zeit implementiert, während WCF- und IoC-Interception zur Laufzeit ausgeführt wird. Aber die allgemeine Idee ist dieselbe. Siehe mehr Here.

1

Was Sie suchen, ist Interceptors. Mit WCF können Sie Interzeptoren in verschiedenen Phasen der Anforderungsverarbeitung hinzufügen.

Implementieren Sie einen Interceptor, der wie Ihr Beispiel aussieht. Informationen über die interceptors


ich, dass Ihre Abfangjäger Funktion so etwas wie dies aussehen wird recomment würde: Um den Methodennamen Blick auf diese SO question

{ 
    try 
    { 
     Log(string.Format("Entering method: {0}",/*function name*/)); 
     //proceed with execution 
     Log(string.Format("Exiting method: {0}",/*function name*/)); 
    } 
    catch (Exception exception) 
    { 
     Log(string.Format("Exiting method {0} with failure: {1}:,/*function name*/,exception.ToString()); 
} 

    zu erhalten
  • Was ich auch normalerweise mache, ist in der Entering Nachricht Druckwerte auf Eingangsparameter ers, wenn es irgendwelche gibt, und auch auf Exiting im Falle eines Rückgabewerts drucken Sie es auch. Macht Protokoll lesen so viel nützlicher.
Verwandte Themen