#.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.