我目前正在WPF应用程序中使用Application Insights。我手动处理几乎所有东西,所以在启动时我创建了一个遥测客户端并设置了多个Context属性,如数据库版本,可用RAM,监视器数量等。这是我们用来分割和过滤遥测数据的信息。
我遇到的问题是每次调用遥测客户端(TrackPageView,TrackEvent等)时都会发送所有这些信息。是否有任何方法可以在每个会话中仅发送一次信息,但仍然可以在门户网站中过滤和分段?
以下是我的代码摘录:
private static TelemetryClient _telemetry;
public static void Initialize(DeviceInfo deviceInfo, ApplicationInfo appInfo) {
_telemetry = new TelemetryClient(TelemetryConfiguration.Active);
_telemetry.Context.Device.OperatingSystem = deviceInfo.OsVersion;
_telemetry.Context.Device.Id = deviceInfo.ProcessorId;
_telemetry.Context.Component.Version = appInfo.Version;
_telemetry.Context.Session.Id = Guid.NewGuid().ToString();
_telemetry.Context.User.Id = appInfo.UserId;
_telemetry.Context.Properties["Cpu"] = deviceInfo.Cpu;
_telemetry.Context.Properties["NumberOfMonitors"] = deviceInfo.NumberOfMonitors;
_telemetry.Context.Properties["TotalAvailableMemory"] = deviceInfo.TotalAvailableMemory;
}
public static void TrackPageView(string pageName) {
_telemetry.TrackPageView(pageName);
}
答案 0 :(得分:0)
不,没有“内置”方式每次会话只发送一次该数据。
如果有,则必须有sessions
表,并且您必须在每个sessions
和customEvents
/ pageViews
之间加入查询以获取该信息。然后还有一些技巧需要做,以便在会话进行时让你更新内容(如果有人在应用程序打开时插入显示器会发生什么?)
作为替代方案,您可以创建一个您仅在拥有该信息的情况下发送一次的单个事件。
但是,如果你这样做,你必须再次开始加入那个特定的事件,你就会失去轻易提出诸如“人们用2个监视器做X的频率”等问题的能力,你可以现在很容易做到。