При реализации IComMethodEvents вы получаете три события.
- OnMethodCall
- OnMethodException
- OnMethodReturn
Целью того, что я пытаюсь сделать, является регистрация времени вызова для каждого метода в компонентах COM +.
Время события может быть получено с помощью lTime
и lMicroTime
в структуре COMSVCSEVENTINFO, так что запустив это время как в OnMethodCall
, так и в OnMethodReturn
Я должен уметь вычислять время вызова, но как я могу быть уверен, что эти два события связаны.
При тестировании это выглядит так, как если бы я мог использовать активированный объект just-in-time (JIT) oid
.
Любые проблемы при этом или другие способы?
Одной из проблем может быть то, что я вижу, что oid
часто используется повторно, поэтому, если события по какой-либо причине выведены из строя, было бы немного сложнее реализовать корреляцию.
Обновление 1:
Дальнейшее тестирование показывает, что oid
недостаточно для многопользовательского сценария. Один и тот же объект используется одновременно, поэтому корреляция должна выполняться с использованием, по меньшей мере, oid
и original caller
. Следующим вопросом будет вопрос: как получить оригинального звонящего от подписчика событий COM +?
Обновление 2:
Только что нашел IComMethod2Events. Разница в том, что события имеют идентификатор потока, выполняющего вызов. Выглядит многообещающе в тестах, и я не могу представить сценарий, где корреляция может потерпеть неудачу. Модель Threading для компонентов COM + Any Apartment
.
Обновление 3
В этой статье Создание COM + PerfMon счетчиков для мониторинга COM + данных oid
. Я не думаю, что этого достаточно в многопоточной квартире.
<суб > Примечание. В конечном итоге я введу это в Delphi, чтобы добавить тег Delphi. Я также добавил тег С#, потому что, скорее всего, язык, используемый для реализации интерфейса, вообще не важен. Обновление: предварительно добавив тег С++, чтобы привлечь внимание того, кто ранее использовал этот материал.
суб >