0

В моем проекте используется ApplicationInsightsHttpModule, который инициализирует Operation.Id от Microsoft.ApplicationInsights.RequestTelemetry Значение HTTP, заданное клиентским пользовательским интерфейсом. Теперь я хочу, чтобы мой API был потреблен третьей стороной, которая предоставит HTTP-заголовок X-Operation-Id, чтобы соотнести наши действия. Как заставить Application Insights инициализировать Operation.Id из этого заголовка, если он присутствует в запросе?Приложение Insights Operation.Id из HTTP-заголовка

This говорит, что стандартный контекст управляется автоматически AI, поэтому мне нужен образец кода, который показывает, как правильно инициализировать Operation.Id с пользовательским значением. Следующий код не работает, значение заголовка игнорируется:

var operationInitializer = TelemetryConfiguration.Active.TelemetryInitializers.OfType<Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer>().FirstOrDefault(); 

if (operationInitializer != null) 
{ 
     operationInitializer.RootOperationIdHeaderName = "X-Operation-Id"; 
} 
+0

Возможный дубликат [Добавление идентификатора корреляции в автоматически создаваемую телеметрию с помощью App Insights] (http://stackoverflow.com/questions/32171747/adding-correlation-id-to-automatically-generated-telemetry-with-app-insights) –

ответ

0

На данный момент задан вопрос AI SDK имеет версию 2.2. Недавно я обновился до последней версии 2.4 и теперь работает так, как планировалось. Итак, если вы передаете сказать «привет» в X-Operation-Id заголовке HTTP (вам все еще нужно, что код в вопросе в Application_Start()), а затем попросить телеметрией в Application_BeginRequest() (или там, где HttpContext доступен):

RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry(); 

telemetry.Id будет содержат что-то вроде |HELLO.d0b9d5b7_. Этот шестнадцатеричный суффикс увеличивается, если вы передаете «HELLO» в следующем запросе, так что Id всегда уникален. Я не знаю, может ли это быть отменено.

1

код, который вы включили в своем вопросе должен работать на первый взгляде: вы ищете правильный инициализатор и наиважнейшую правильную собственность. Однако может быть несколько причин, по которым он работает не так, как ожидалось, и отладка этого сложна, потому что для этого вам потребуется фактически перейти на код Application Insights (если вы решите, the sources for every release are archived on GH).

Моей рекомендацией в вашем случае было бы принять другой подход - вместо того, чтобы пытаться переопределить это свойство, создайте и зарегистрируйте свой собственный инициализатор телеметрии, чтобы установить Operation.ID из вашего заголовка. Если вы установите это свойство, OperationCorrelationTelemetryInitializer игнорирует его и не отменяет. Таким образом вы подтверждаете правильность чтения заголовков, и вы можете легко установить точку останова в методе Initialize для отладки.

+0

Моя самая большая проблема заключается в том, что я не уверен, как правильно * инициализировать его и получить доступ к «HttpContext» в инициализаторе. Это просто «HttpContext.Current»? Будет ли этот wotk с приложениями на основе OWIN? – UserControl