ITelemetryProcessor не работает при добавлении свойств из данных сеанса HttpContext

#.net-core #azure-application-insights #httpcontext #httpsession #telemetry

#.net-core #azure-application-insights #httpcontext #httpsession #телеметрия

Вопрос:

Для следующего кода GetSessionData вернет десериализованные данные (словарь), сохраненные ранее (в промежуточном программном обеспечении), в полезную нагрузку HttpContext.Session. Как бы я ни пытался, я не вижу, чтобы элементы попадали в журнал запросов в Application Insights для любых HTTP-запросов, отправленных из браузера.

 public void Process(ITelemetry tel)
{
    if (tel is ISupportProperties sp)
    {
        IDictionary<string, string> items = this.httpContextAccessor.HttpContext?.GetSessionData();
        if (items != null amp;amp; items.Count > 0)
        {
            foreach (KeyValuePair<string, string> entry in items)
            {
                sp.Properties[entry.Key] = entry.Value;
            }
        }
    }

    this._next.Process(tel);
}
  

Но для следующего кода я всегда мог видеть его в пользовательских размерах каждого запроса.

 public void Process(ITelemetry tel)
{
    if (tel is ISupportProperties sp)
    {
        sp.Properties["MyTestKey"] = "MyTestValue";
    }

    this._next.Process(tel);
}
  

Есть причина, почему?

Комментарии:

1. Можете ли вы убедиться, что элементы не пустые? Вы можете установить контрольную точку в Process методе, чтобы увидеть, действительно ли выполняется код (например sp.Properties[entry.Key] = entry.Value; ).

2. Обычно я ожидаю, что свойства добавляются с использованием ITelemetryInitializer реализации, а не телеметрического процессора. Не уверен, поможет ли это в этом случае. Если вы создаете класс, производный от TelemetryInitializerBase , вы получаете метод protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry) для реализации, который предоставляет доступ к контексту http.