使用操作上下文跟踪相关事件的问题

Issue with tracking related events using Operation Context

我有一个 WPF 应用程序,我想使用 Application Insights 对其进行监视。我想将每个用户操作分组为一个请求,并嵌入自定义事件和依赖调用。从我在 documentation 操作上下文中读到的内容应该是正确的方法。我写了下面的代码:

using (var operation = telemetryClient.StartOperation<RequestTelemetry>(
      $"test operation {Guid.NewGuid()}"))
{
    telemetryClient.TrackEvent("my test event");
    telemetryClient.StopOperation(operation);
}

不幸的是,当我检查 Application Insights 门户时 "my test event" 没有显示为请求事件的相关事件。我做了一些实验,发现如果我手动设置操作属性,事件就会变得相关:

using (var operation = telemetryClient.StartOperation<RequestTelemetry>(
      $"test operation {Guid.NewGuid()}"))
{
    var ev = new EventTelemetry("test event");
    ev.Context.Operation.Id = operation.Telemetry.Context.Operation.Id;
    ev.Context.Operation.Name = operation.Telemetry.Context.Operation.Name;
    telemetryClient.TrackEvent(ev);
    telemetryClient.StopOperation(operation);
}

但我感觉不应该是这个样子。所以我的问题是:有人可以指出我在第一个片段中做错了什么吗? TelemetryClient 是否有一些神奇的设置使它的行为如文档中所述?

确保同一上下文中所有传出遥测具有相同操作 ID、名称等的相对简单的方法是使用带有 CallContext 的 TelemetryInitializer。

This is a really good blog post 展示了如何操作。