适用于 .NET Core Azure WebJob 的 Application Insights

Posted

技术标签:

【中文标题】适用于 .NET Core Azure WebJob 的 Application Insights【英文标题】:Application Insights for .NET Core Azure WebJob 【发布时间】:2019-07-05 06:04:21 【问题描述】:

当我尝试设置我的 .NET Core WebJob 以使用 Application Insights 时,我在启动时收到以下异常:

System.InvalidOperationException:“尝试激活“Microsoft.AspNetCore.Hosting.DefaultApplicationInsightsServiceConfigureOptions”时,无法解析“Microsoft.AspNetCore.Hosting.IHostingEnvironment”类型的服务。”

我确定我忽略了某些东西,但我找不到。我的 Main 方法就像在许多示例中一样,例如 here

   public static void Main(string[] args)
    
        var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        Configuration.EnvironmentName = environment;
        Configuration.IsDevelopment = string.Equals(environment, "Development");

        var host = new HostBuilder()
            .UseEnvironment("Development")
            .ConfigureWebJobs(b =>
            
                b.UseHostId("ecad61-62cf-47f4-93b4-6efcded6")
                .AddAzureStorageCoreServices()
                .AddAzureStorage()
                .AddTimers()
                .AddEventHubs();
            )
            .ConfigureServices(x => ConfigureServices(x))
            .ConfigureAppConfiguration(b =>
            
                b.AddJsonFile("appsettings.json", false, false);
                b.AddJsonFile($"appsettings.environment.json", true);
                b.AddEnvironmentVariables();
                Configuration.Config = b.Build();
            )
            .ConfigureLogging((context, b) =>
            
                b.AddConfiguration(Configuration.Config);
                b.SetMinimumLevel(LogLevel.Trace);
                b.AddConsole();
                b.AddDebug();
                //TODO fix applicationInsights
                string appInsightsKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
                if (!string.IsNullOrEmpty(appInsightsKey))
                
                    b.AddApplicationInsights(o => o.InstrumentationKey = appInsightsKey);
                
            )
            .Build();

        using (host)
        
            host.Run();
        
    

【问题讨论】:

【参考方案1】:

乍一看(并且是在黑暗中真实拍摄),我会检查 context.Configuration 这是否会引发异常,因为集合中不存在 APPINSIGHTS_INSTRUMENTATIONKEY。缺少的键可能会引发一个异常,该异常会冒泡到您的 DI 容器中。

编辑:尝试尝试使用此软件包,如果可行,请告诉我。它目前处于预发布状态。 https://www.nuget.org/packages/Microsoft.Extensions.Logging.ApplicationInsights/

编辑:对 AddApplicationInsightsTelemetry 的调用使用 DefaultApplicationInsightsServiceConfigureOptions 取决于 IHostingEnvironment。 WebJobsSDK 没有使用 IHostingEnvironment,这会导致您的异常。 WebJobsSDK 有关于 Application Insights 的使用,你应该能够像 https://github.com/Azure/azure-webjobs-sdk/tree/dev/sample/SampleHost 示例一样使用它

【讨论】:

嗨!这条线实际上不太正确,因为我正在使用这个 Configuration.Config 对象。但无论如何,它奏效了,而且不是问题。我尝试创建自己的 IHostingEnvironment 对象,并将其添加到 ConfigureServices 方法中,但这也没有解决。 您介意发布您的项目引用的 nuget 包吗?我正在尝试回购这个问题,但缺少一些依赖项,我想确保我使用的是你正在使用的东西。 "Microsoft.ApplicationInsights.AspNetCore" 版本="2.4.1" "Microsoft.AspNetCore.Http" 版本="2.2.0" "Microsoft.AspNetCore.Http.Abstractions" 版本="2.2。 0""Microsoft.Azure.WebJobs"版本="3.0.4"Microsoft.Azure.WebJobs.Extensions"版本="3.0.1""Microsoft.Azure.WebJobs.Extensions.EventHubs"版本="3.0.2"" Microsoft.Azure.WebJobs.Extensions.Storage" 版本="3.0.3" "Microsoft.Azure.WebJobs.Host.Storage" 版本="3.0.4" "Microsoft.Azure.WebJobs.Logging.ApplicationInsights" 版本="3.0 .4" "Microsoft.Azure.WebJobs.ServiceBus" 版本="2.3.0" "Microsoft.Extensions.DependencyInjection" Version="2.2.0" "Microsoft.Extensions.Logging.Console" Version="2.2.0" "Microsoft.Extensions.Logging.Debug" Version=" 2.2.0" "Microsoft.Extensions.Options.ConfigurationExtensions" 版本="2.2.0" 我的 Main() 没有遇到任何明显的问题。 ConfigureServices(IServicesCollection x) 是做什么的?

以上是关于适用于 .NET Core Azure WebJob 的 Application Insights的主要内容,如果未能解决你的问题,请参考以下文章

Azure B2C 和 .net core 3.1 身份验证问题

使用适用于 .NET 的 Azure 流分析 API 设置和运行分析作业

Azure.Cosmos 还是 Microsoft.Azure.Cosmos、Azure.Storage.Blob 还是 Microsoft.Azure.Storage.Blob?适用于 .NET C

FluentEmail - 适用于 .NET 和 .NET Core 的邮件发送库

json 适用于.NET Core的xUnit测试项目

是否有适用于 Azure 的 c#/asp.net mvc3 文件图像选择器/上传器控件