我的项目使用ApplicationInsightsHttpModule
从客户端UI应用程序设置的Operation.Id
HTTP值初始化Microsoft.ApplicationInsights.RequestTelemetry
。现在我希望我的API由第三方使用,第三方将提供X-Operation-Id
HTTP标头来关联我们的活动。如果请求中存在Operation.Id
,那么如何在其中初始化Operation.Id
?
This表示标准上下文由AI自动管理,因此我需要一个代码示例,说明如何使用自定义值正确初始化var operationInitializer = TelemetryConfiguration.Active.TelemetryInitializers.OfType<Microsoft.ApplicationInsights.Web.OperationCorrelationTelemetryInitializer>().FirstOrDefault();
if (operationInitializer != null)
{
operationInitializer.RootOperationIdHeaderName = "X-Operation-Id";
}
。以下代码不起作用,标头值被忽略:
parseInt
答案 0 :(得分:1)
您在问题中包含的代码应该是第一眼看到的:您正在寻找正确的初始化程序并覆盖正确的属性。但是,可能有多种原因导致它无法按预期工作,并且调试这很难,因为它需要您实际进入Application Insights代码(如果您确定,the sources for every release are archived on GH)。
我的建议是采用不同的方法 - 而不是尝试覆盖此属性,创建并注册自己的遥测初始化程序以从标题中设置Operation.ID。如果设置此属性,OperationCorrelationTelemetryInitializer将忽略它而不覆盖。通过这种方式,您可以确认可以正确读取标头,并且可以在Initialize方法中轻松设置断点以进行调试。
答案 1 :(得分:0)
目前问的问题是AI SDK有2.2版本。最近我升级到最新版本2.4,它现在按预期工作。所以,如果你通过说'HELLO&#39;在X-Operation-Id
HTTP标头中(您仍然需要Application_Start()
中问题中的代码),然后在Application_BeginRequest()
(或HttpContext
可用的任何地方)要求进行遥测:
RequestTelemetry telemetry = HttpContext.Current.GetRequestTelemetry();
telemetry.Id
将包含|HELLO.d0b9d5b7_
之类的内容。
如果你通过&#39; HELLO&#39;那十六进制后缀会增加。在下一个请求中,Id
始终是唯一的。我不知道是否可以覆盖它。