0

我的項目使用ApplicationInsightsHttpModule,它從Microsoft.ApplicationInsights.RequestTelemetry初始化Operation.Id由客戶端UI應用程序設置的HTTP值。現在我想讓我的API被第三方使用,它將提供X-Operation-Id HTTP標頭來關聯我們的活動。如果應用程序見解存在於請求中,那麼如何使Application Insights從該標頭初始化Operation.Id應用程序洞察來自HTTP標頭的Operation.Id

This表示標準上下文由AI自動管理,所以我需要一個代碼示例,顯示如何使用自定義值正確初始化Operation.Id。下面的代碼不工作,則頭值被忽略:

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

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

[將相關ID添加到自動生成的遙測與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'嗎?這與基於OWIN的應用程序兼容嗎? – UserControl

相關問題