HttpRequestOut.Stop上的Activity.Current为null

时间:2018-11-07 09:22:58

标签: c# .net-core azure-application-insights system.diagnostics .net-core-2.1

我正在使用Application Insights for Console App(.NET Core 2.1)。

ApplicationInsights.DependencyCollector相比,我需要收集更多有关依赖关系(请求/响应)的信息。

因此,我尝试了this blog中描述的方法。它适用于请求。
但这对响应无效。因为在上面的代码中,Activity.Currentnull

[DiagnosticName("System.Net.Http.HttpRequestOut.Stop")]
public virtual void OnHttpRequestOutStop(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, TaskStatus requestTaskStatus)
{
    Console.WriteLine(Activity.Current);
}

在与HttpRequestOut.Start类似的代码中,它具有适当的值:

[DiagnosticName("System.Net.Http.HttpRequestOut.Start")]
public virtual void OnHttpRequestOutStart(System.Net.Http.HttpRequestMessage request)
{
    Console.WriteLine(Activity.Current);
}

为什么在System.Net.Http.HttpRequestOut.Stop事件中,Activity.Currentnull
如何在开始停止事件中访问相同的活动?

更新
我找到了有关问题here的一些信息。

1 个答案:

答案 0 :(得分:0)

This comment确实有所帮助。

  

最复杂的情​​况是您要访问响应并基于此来丰富遥测。您仍然可以使用诊断源Stop事件,但是由于AppInsights均匀地监听同一事件,并且您的侦听器需要在AppInsights之前接收Stop事件,因此这变得很骇人。

因此,我只是在遥测客户端之前初始化了“丰富”观察者类。并且import math lst = [2,10,4,3,8,6,9,9,18,27] l = len(lst) mp = {} mn = min(lst) mx = max(lst) nmax = int(math.sqrt(mx / mn)) for i in range(2, l): for n in range(2, min(i, (l - 1)//2, nmax) + 1): if lst[i - n] * n == lst[i]: t = (i-n, n) le = mp[t] if t in mp else 1 mp[(i, n)] = le + 1 res = {} for x in mp: n = x[1] le = mp[x] ending = x[0] if n in res: if res[n][0] < le: res[n] = (le, ending) else: res[n] = (le, ending) print(mp) print(res) {(2, 2): 2, (4, 2): 3, (5, 2): 2, (6, 3): 2, (8, 2): 2, (8, 3): 2, (9, 3): 3} {2: (3, 4), 3: (3, 9)} 中的Activity.Current不再是null