正在加载

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 mode)下运行。这会将 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 代理实例。

© . All rights reserved.