2 Stimmen

Überwachen von laufenden .net-Anwendungen

Ich habe einige .net-Apps laufen, die ich zum Beispiel überwachen muss, und dann wird MethodeA in App1 aufgerufen, meine Überwachungs-App sollte dies erkennen. Ich habe viele laufende Apps und die hier vorgeschlagene Lösung besteht darin, all diese Apps neu zu kompilieren und eine neue Zeile in den gewünschten Methoden einzufügen, die wir überwachen möchten. Ich möchte das nur tun, wenn es absolut keinen anderen Weg gibt. Hat das also schon mal jemand gemacht? Im Grunde genommen muss ich eine neue App erstellen, die mir sagt, wenn ich auf einen Knopf klicke: MethodeA wurde in App1 in Echtzeit aufgerufen...

Danke!

3voto

Mitch Wheat Punkte 287474

Es gibt verschiedene Möglichkeiten, dies zu tun. Eine Möglichkeit besteht darin, log4Net zu verwenden, Ihre Methoden mit Aufrufen der Schreibmethoden von log4Net zu "bestreuen". Sie können zwischen verschiedenen Protokollierungsanbietern (Zielorte) wie E-Mail oder einer Datenbank wählen, aber ein weniger bekannter Tipp besteht darin, das eigenständige Programm DebugView (SysInternals -> jetzt Microsoft) herunterzuladen, das auf die Standardnachrichten lauscht.

1voto

TcKs Punkte 24671

Der PostSharp bietet eine Möglichkeit, den kompilierten .net-Code zu bearbeiten. Die Bearbeitung erfolgt in C#-Code, der kompiliert wird (Attribute) oder durch Konfigurationscode. Sie haben einen Mechanismus, der das Aufrufen einer Methode/eines Ereignisses protokollieren (oder auf andere Weise verarbeiten) und vieles mehr kann.

Ich denke, das ist ein Werkzeug, das du brauchst.

0voto

System.Diagnostics.PerformanceCounter ist ein guter Ausgangspunkt. Sie können neue Zähler erstellen, die im Leistungssteuerungs-Applet angezeigt werden können. Am Anfang sind sie etwas verwirrend, aber wenn Sie sich klar machen, dass durchschnittliche Zähler zwei Komponenten benötigen, um einen Prozentsatz zu berechnen, wird es viel einfacher.

0voto

Shachar Punkte 943

Ich weiß nicht, ob .NET einen entsprechenden Mechanismus hat, aber in Java können Sie eine Agenten-JAR-Datei angeben, nämlich eine Klasse, die benachrichtigt/aufgerufen wird, wenn jede Klasse geladen wird. Dann könnten Sie über Instrumentierung/Bytecode-Manipulation solche Methodenaufrufe abfangen. Vielleicht können Sie den Klassenlader auf irgendeine Weise in .NET ersetzen. Nicht sicher.

0voto

GEOCHET Punkte 20824

Reflexion ist das, wonach du in .NET suchst, aber ich bin mir nicht sicher über die Implementierungsdetails dessen, was du tun möchtest.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X