在Application Insights中,如何避免每次请求发送会话自定义数据?

时间:2017-09-12 14:48:19

标签: .net azure-application-insights

我目前正在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);
}

1 个答案:

答案 0 :(得分:0)

不,没有“内置”方式每次会话只发送一次该数据。

如果有,则必须有sessions表,并且您必须在每个sessionscustomEvents / pageViews之间加入查询以获取该信息。然后还有一些技巧需要做,以便在会话进行时让你更新内容(如果有人在应用程序打开时插入显示器会发生什么?)

作为替代方案,您可以创建一个仅在拥有该信息的情况下发送一次的单个事件。

但是,如果你这样做,你必须再次开始加入那个特定的事件,你就会失去轻易提出诸如“人们用2个监视器做X的频率”等问题的能力,你可以现在很容易做到。