我们在ASP.NET应用程序上托管了一个SPA。我们希望跟踪整个应用的构建版本。
所以这个遥测初始化器
public class VersionInfoTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
telemetry.Context.Component.Version =
typeof(Startup).Assembly.GetName().Version.ToString();
}
}
将用于Gloabal.asax
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
var tc = TelemetryConfiguration.Active;
tc.InstrumentationKey = ConfigurationManager.AppSettings["AI Instrumentation Key"];
tc.TelemetryInitializers.Add(new VersionInfoTelemetryInitializer());
...
}
}
服务器端遥测将附加版本信息。但我无法为客户端遥测做同样的事情。我试过这个
var appInsights = window.appInsights || function(config) {
// standard js snippet from azure portal
}({
instrumentationKey: '{{INSTRUMENTATIONKEY}}'
});
window.appInsights = appInsights;
window.appInsights.context.application.ver = 'some version number';
导致以下JS错误
Uncaught TypeError: Cannot read property 'application' of undefined
我也试过
appInsights.queue.push(function () {
appInsights.context.addTelemetryInitializer(versionInfoTelemetryInitialier);
});
function versionInfoTelemetryInitialier(envelope) {
var telemetryItem = envelope.data.baseData;
telemetry.context.component.version = 'some version number';
}
将通过以下消息发出警告
AI: TelemetryInitializerFailed message:"One of telemetry initializers failed, telemetry
item will not be sent: TypeError" props:"{exception:[object Error]{ stack: 'TypeError:
Unable to get property 'component' of undefined or null reference\n at
versionInfoTelemetryInitialier (https://localhost:44301/landing/index:107:9)\n at
n.prototype._track (https://az416426.vo.msecnd.net/scripts/a/ai.0.js:1:65589)\n at
n.prototype.track...
我应该怎么做才能让客户端遥测附有版本信息。
答案 0 :(得分:0)
我认为你的第二次尝试非常接近。你需要通过队列来做,以确保它在所有AI脚本实际加载后发生,所以我认为这是正确的:
appInsights.queue.push(function () {
appInsights.context.addTelemetryInitializer(versionInfoTelemetryInitialier);
});
但是在初始化程序中,您从第一个示例中的context.application.ver
切换到了第二个示例中的context.component.version
。
github repo上记录了javascript SDK: https://github.com/Microsoft/ApplicationInsights-JS/blob/master/API-reference.md
以及那里的例子显示:
context.application.ver: string
context.application.build : string
所以不应该使用初始化方法:
function versionInfoTelemetryInitialier(envelope) {
var telemetryItem = envelope.data.baseData;
telemetry.context.application.ver = 'some version number';
}