2012-04-11 15 views
1

Wir brauchen ein neues Profilmerkmal unserer WCF-Anwendung hinzuzufügen, für die Protokollierung, wo die Zeit in der Anwendung spendt wird. Ich sehe PostSharp nach einem konventionsgetriebenen Ansatz der Anwendung der Protokollierung und benötige eine Eingabe, wie man sie tatsächlich protokolliert. Ich habe bereits eine benutzerdefinierte Klasse für Protokollierungszwecke mit StopWatch erstellt und kann die Schritte durch die Ebenen meiner WCF-Anwendung protokollieren. Ich frage mich jedoch, ob es eine thread-sichere alternative Bibliothek gibt, die ich zu diesem Zweck in Verbindung mit PostSharp verwenden könnte. Ich bin auf MiniProfiler gestoßen, aber es scheint hauptsächlich für ASP.NET MVC-Anwendungen gedacht zu sein. Irgendwelche anderen Rahmen, die ich berücksichtigen sollte oder sollte ich nur meine benutzerdefinierte Klasse verwenden? DankeProfiler lib für wcf + Postsharp

+0

Mini-Profiler unterstützt WCF es –

Antwort

0

Ich habe etwas in der Vergangenheit mit einem IClientMessageInspector auf einem benutzerdefinierten IEndpointBehavior implementiert. Je nachdem, welche Art von Protokollierung Sie verwenden möchten, könnte dies den Trick darstellen. Es gibt ein Beispiel in dem folgenden Link

IClientMessageInspector Interface

+0

Nicht gerade einmal ein Demo-Projekt ist das, was ich suche. Z.B. Im Moment habe ich post shared konfiguriert, um alle öffentlichen Methoden in einer bestimmten Assembly zu profilieren. Ich möchte wissen, wie lange jeder Methodenaufruf die Ebenen durchläuft, bis wir die Datenbank aufrufen. Jetzt habe ich es mit einer benutzerdefinierten Klasse geschafft, die das Ergebnis in XML in eine log4net-Datenbank ausgeben kann. Ich frage mich nur, ob ich zu diesem Zweck einen Rahmen von irgendwelchen Arten anstelle dieses einfachen Ansatzes verwenden sollte. – jaspernygaard

0

Postsharp selbst Thread-sicher ist. Die Aspekte, die Sie schreiben, sind möglicherweise threadsicher, wenn sie schlecht geschrieben sind, aber es gibt immer einen Weg, sie threadsicher zu machen.

Wenn Sie OnMethodBoundaryAspect verwenden und etwas von OnEntry an OnSuccess übergeben müssen, speichern Sie den anfänglichen Stoppuhrwert in OnMethodExecutionArgs.MethodExecutionTag.