AppDynamics 代理如何在内部检测 .NET 应用程序

How does AppDynamics agent instrument .NET applications internally

我探索了 AppDynamics 和其他 APM 解决方案,以便为我的公司选择合适的解决方案。

我已经创建了简单的演示 .NET 应用程序(使用它的 WCF 服务和控制台客户端)。然后我在机器上安装了 AppDynamics 代理,并像独立应用程序一样为客户端和服务配置它:

<standalone-application executable="AppDynamicsDemo.exe">
    <tier name="Server tier" />
</standalone-application>
<standalone-application executable="AppDynamicsClient.exe">
    <tier name="Client tier" />
</standalone-application>

当我启动我的客户端和服务时,我看到 AppD 代理有 "injected" 代码到我的应用程序并将 "Running non-obfuscated client" 写入控制台

我想了解 AppDynamics 代理使用哪些技术或方法来检测没有 SDK 且只是一个单独的进程(服务)的 .NET 应用程序? 它如何在不被服务直接使用的情况下侦听我的服务的传入 WCF 调用(它没有作为程序集引用,甚至 app.config 中也没有提到)?

感谢您回答我的问题。大多数 APM 工具中的 .NET 代理的工作方式相同,即利用 .NET SDK 中的探查器 API,并允许数据收集以及回调和其他拦截。大多数工具还使用性能计数器数据和 .NET 运行时之外的其他来源。这允许您在数据收集方面做一些类似于 Java 的事情。

参考:https://docs.microsoft.com/en-us/visualstudio/profiling/walkthrough-using-profiler-apis?view=vs-2017

http://www.blong.com/conferences/dcon2003/internals/profiling.htm