Activity.Current является нулевым на HttpRequestOut.Stop - PullRequest
0 голосов
/ 07 ноября 2018

Я использую Application Insights для консольного приложения (.NET Core 2.1).

Мне нужно собрать больше информации о зависимостях (запросах / ответах), чем ApplicationInsights.DependencyCollector.

Итак, я попробовал подход, описанный в этом блоге . И это работает для запросов.
Но это не работает для ответов. Потому что в коде выше Activity.Current это null:

[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.Current равно null?
Как я могу получить доступ к одной и той же активности в Start и Stop events?

UPDATE
Я нашел некоторую информацию о проблеме здесь .

1 Ответ

0 голосов
/ 07 ноября 2018

Этот комментарий действительно помог.

Самый сложный сценарий - это когда вы хотите получить доступ к ответу и обогатить его на основе телеметрии. Вы все еще можете использовать диагностическое событие Stop источника, однако это становится хакерским, потому что AppInsights слушает то же самое, и ваш слушатель должен получить событие Stop до AppInsights.

Так что я просто инициализировал свой класс наблюдателей по «обогащению» перед клиентом телеметрии. И Activity.Current больше не null в OnHttpRequestOutStop.

...