如何将连接字符串传递到 Application Insights?

Ola*_*avT 1 console-application azure-application-insights .net-core

我有一个 .NET Core 3.1 控制台应用程序,希望使用 appsettings.json 中指定的连接字符串来配置它。

这是测试应用程序的代码:

static void Main(string[] args)
{
    var configurationBuilder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables();

    // To be able to read configuration from .json files
    var configuration = configurationBuilder.Build();

    // Create the DI container.
    IServiceCollection services = new ServiceCollection();

    services.AddApplicationInsightsTelemetryWorkerService();

    // Build ServiceProvider.
    IServiceProvider serviceProvider = services.BuildServiceProvider();

    // Obtain TelemetryClient instance from DI, for additional manual tracking or to flush.
    var telemetryClient = serviceProvider.GetRequiredService<TelemetryClient>();

    telemetryClient.TrackTrace("Hello, world 3!");

    // Explicitly call Flush() followed by sleep is required in Console Apps.
    // This is to ensure that even if application terminates, telemetry is sent to the back-end.
    telemetryClient.Flush();
    Task.Delay(5000).Wait();
}
Run Code Online (Sandbox Code Playgroud)

问题在于 Application Insight 似乎没有获取连接字符串。我在 Application Insights 中没有看到任何跟踪消息。如果我将检测密钥传递给 AddApplicationInsightsTelemetryWorkerService ,它就会起作用。

这是appsettings.json的内容:

{
  "ApplicationInsights": {
    "ConnectionString": "<my connection string>"
  }
}
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

Pét*_*sák 5

我不知道问题是否仍然存在,但您可以将连接字符串直接传递到 TelemetryConfiguration。

var telemetryConfiguration = TelemetryConfiguration.CreateDefault();
telemetryConfiguration.ConnectionString = Configuration["AzureApplicationInsightsConnectionString"];
Run Code Online (Sandbox Code Playgroud)

或者,您可以将其添加到服务集合中:

var options = new ApplicationInsightsServiceOptions { ConnectionString = Configuration["AzureApplicationInsightsConnectionString"] };
services.AddApplicationInsightsTelemetry(options: options);
Run Code Online (Sandbox Code Playgroud)