ASP.NET编辑

快速入门编辑

要为 ASP.NET(完整 .NET Framework)启用自动检测,您需要安装 Elastic.Apm.AspNetFullFramework 包,在您的 web.config 文件中添加对该包的引用,然后编译并部署您的应用程序。

  1. 确保您可以访问应用程序源代码并安装 Elastic.Apm.AspNetFullFramework 包。
  2. 通过添加 ElasticApmModule IIS 模块,在您的应用程序的 web.config 文件中引用 Elastic.Apm.AspNetFullFramework

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <modules>
                <add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" />
            </modules>
        </system.webServer>
    </configuration>

    有两种可用的配置来源。要了解更多信息,请参阅ASP.NET 上的配置

    默认情况下,代理会为所有 HTTP 请求创建事务,包括静态内容:.html 页面、图像等。

    要仅为具有动态内容的 HTTP 请求创建事务,例如 .aspx 页面,请将 managedHandler preCondition 添加到您的 web.config 文件中

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.webServer>
            <modules>
                <add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" preCondition="managedHandler" />
            </modules>
        </system.webServer>
    </configuration>

    要了解有关添加模块的更多信息,请参阅Microsoft 文档

我们的 IIS 模块需要

  • IIS 7 或更高版本
  • 应用程序池的管道模式必须设置为集成(IIS 7 及更高版本的默认设置)
  • 部署的 .NET 应用程序不得在 quirks 模式下运行。这使得 LegacyAspNetSynchronizationContext 成为异步上下文处理程序,并且当异步代码引入线程切换时,可能会破坏 HttpContext.Items 的正确恢复。
  1. 重新编译您的应用程序并进行部署。

    ElasticApmModule 在第一次初始化时实例化 APM 代理。但是,在某些情况下,您可能希望控制代理实例化,例如在应用程序启动时配置过滤器。

    为此,ElasticApmModule 公开了一个 CreateAgentComponents() 方法,该方法返回配置为与 ASP.NET Full Framework 一起使用的代理组件,然后可以实例化代理。

    例如,您可以在应用程序启动时将事务过滤器添加到代理

    public class MvcApplication : HttpApplication
    {
        protected void Application_Start()
        {
            // other application startup e.g. RouteConfig, etc.
    
            // set up agent with components
            var agentComponents = ElasticApmModule.CreateAgentComponents();
            Agent.Setup(agentComponents);
    
            // add transaction filter
            Agent.AddFilter((ITransaction t) =>
            {
                t.SetLabel("foo", "bar");
                return t;
            });
        }
    }

    现在,ElasticApmModule 将在初始化时使用 APM 代理的实例化实例。