Beim Implementieren von erhalten Sie drei Ereignisse.Korrelieren von IComMethodEvents
- OnMethodCall
- OnMethodException
- OnMethodReturn
Ziel, was ich versuche zu tun, Anrufzeiten pro Verfahren in COM + -Komponenten protokollieren.
Die Zeit des Ereignisses kann in beide, indem Sie die Zeit so unter Verwendung lTime
und lMicroTime
in der COMSVCSEVENTINFO Struktur abgerufen werden OnMethodCall
und in OnMethodReturn
sollte ich in der Lage sein, die Anrufzeit zu berechnen, aber wie kann ich sicher sein, dass die beiden Ereignisse sind miteinander verknüpft.
Durch die Prüfung sieht es so aus, als ob ich in der Lage wäre, das Just-in-Time (JIT) aktivierte Objekt oid
zu verwenden.
Haben Sie Probleme damit oder gibt es andere Möglichkeiten?
Ein Problem, das sein könnte, ist, dass ich sehe, die oid
wird häufig wiederverwendet, so dass wenn die Ereignisse aus irgendeinem Grund ausgelöst wird, könnte es etwas schwieriger sein, die Korrelation zu implementieren.
Update 1:
Weitere Tests zeigen, dass oid
in einer Multi-User-Szenario ist nicht genug. Das gleiche Objekt wird gleichzeitig verwendet, so dass die Korrelation unter Verwendung von mindestens oid
und original caller
erfolgen muss. Eine weitere Frage wäre: Wie bekomme ich den ursprünglichen Anrufer von einem COM + -Ereignisteilnehmer?
Update 2:
gefunden Nur IComMethod2Events. Der Unterschied besteht darin, dass die Ereignisse eine Kennung des Threads haben, der den Aufruf ausführt. Sieht in Tests vielversprechend aus und ich kann mir kein Szenario vorstellen, in dem die Korrelation fehlschlagen könnte. Das Threadingmodell für die COM + -Komponenten lautet Any Apartment
.
aktualisieren 3
In diesem Artikel Creating COM+ PerfMon Counters to Monitor COM+ Dataoid
verwendet wird. Ich denke nicht, dass das in einer Multithread-Wohnung reicht.
Hinweis: Ich werde dies in Delphi eventuell implementieren, also habe ich das Delphi-Tag hinzugefügt. Ich fügte auch das C# -Tag hinzu, weil die Wahrscheinlichkeit hoch ist, dass die zur Implementierung der Schnittstelle verwendete Sprache überhaupt nicht wichtig ist. Update: Vorläufig das C++ - Tag hinzufügen, nur um die Aufmerksamkeit von jemandem zu bekommen, der dieses Zeug schon einmal benutzt hat.
Ein Tool zum Überwachen von COM + -Transaktionen: ['AppMetrics'] (http://www.xtremesoft.com/solutions/white_paper_transactions.html). Vielleicht nützlich und Sie können herausfinden, wie sie das Monitoring machen. –
Diese Seite kann auch hilfreich sein, ['MSDN COM + Tracking] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd179218 (v = vs.85) .aspx). –
@LURD danke für die Links. Lesen Sie ein wenig von der MSDN-Verknüpfung und COM + Instrumentation führt Sie schließlich zu den Ereignissen in der Q. COM + Tracking können Sie die Daten erhalten COM + sammelt für Sie, sondern nur auf Komponentenebene (denke ich). –