有一个用 Visual Studio 编写的 WPF 应用程序。我可以将 Application Insights 添加到此 WPF 应用程序吗?我想知道一个按钮/图块被点击了多少次。由于同一个应用程序有多个安装,我想知道哪个按钮从哪个用户/安装中单击了多少次。这可以通过 Application Insights 完成吗?
谢谢阿凡提
有一个用 Visual Studio 编写的 WPF 应用程序。我可以将 Application Insights 添加到此 WPF 应用程序吗?我想知道一个按钮/图块被点击了多少次。由于同一个应用程序有多个安装,我想知道哪个按钮从哪个用户/安装中单击了多少次。这可以通过 Application Insights 完成吗?
谢谢阿凡提
虽然未列为受支持的应用程序类型,但这意味着没有收集/发送到应用程序洞察力的默认遥测数据,也不支持添加 AI/创建应用程序洞察力资源。话虽如此,可以通过几个手动步骤将其添加到您的 WPF 中,以便您可以跟踪您提到的特定场景(如按钮/磁贴单击)。
- 从 Visual Studio 将“Application Insights API”NuGet 添加到项目中(.11 是今天最新的)。
这将添加 Application Insights API 参考并为您的项目创建一个应用程序洞察配置文件。
applicationinsights.config 文件需要使用您的检测密钥进行更新,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
<TelemetryChannel>
<DeveloperMode>false</DeveloperMode>
</TelemetryChannel>
<TelemetryModules>
<Add Type="Microsoft.ApplicationInsights.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights"/>
</TelemetryModules>
<InstrumentationKey>**your-instrumentation-key-guid**</InstrumentationKey>
</ApplicationInsights>
创建应用程序洞察检测密钥登录到您的 azure 订阅。 https://portal.azure.com 单击 + 以创建 Application Insights 资源。然后选择应用程序洞察刀片上的属性磁贴,复制 Instrumentation 密钥并将其添加到您的 applicationinsights.config 文件中。现在在您的 WPF 应用程序中,您可以使用如下所述的 Application Insights sdk:http: //blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-预发布.aspx
您的事件将在诊断搜索刀片中可见,可以在应用程序洞察刀片上进行选择。
注意:遥测在发送到服务之前会在本地批处理 1 分钟,除非在发送时排队超过 500 个遥测事件。
https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/
Microsoft 提供的有关如何将 Application Insights 添加到 Windows 窗体应用程序的官方链接。从链接:
在 Azure 中 - portal.azure.com
在您的应用程序中
TelemetryClient
.我在 WPF 应用程序中使用 MvvmCross,在启动时我创建了一个TelemetryClient
我在整个应用程序中重复使用的单个。
var telemetryClient = new TelemetryClient();
telemetryClient.InstrumentationKey = "your key here from Azure";
telemetryClient.Context.Session.Id = Guid.NewGuid().ToString();
telemetryClient.Context.User.AccountId = Username;
telemetryClient.Context.Component.Version = Settings.Default.Version;
telemetryClient.TrackEvent("Application Start");
Mvx.RegisterSingleton<TelemetryClient>(telemetryClient);
每当“发生某事”时,我都会解决TelemetryClient
并记录该事件。这与跟踪和记录方面的任何其他 Application Insights 实现一样。
举个例子 -
//Resolve the telemetry client
readonly TelemetryClient telemetryClient = Mvx.Resolve<TelemetryClient>();
//Record a page View with some extra information
var pageviewTelemetry = new PageViewTelemetry("Observations");
pageviewTelemetry.Properties.Add("Breadcrumb", breadcrumb);
telemetryClient.TrackPageView(pageviewTelemetry);
//Track an event
var eventTelemetry = new EventTelemetry("Observation Saved");
eventTelemetry.Properties.Add("Saved Observation", observation);
telemetryClient.TrackEvent(eventTelemetry);
//Track an exception
try
{
// do work here
}
catch (Exception ex)
{
telemeteryClient.TrackException(ex);
}
适用于 Windows 桌面应用程序的 Application Insights 不会自动收集/发送任何内容。作为开发人员,需要在应用程序退出时强制刷新。
private void PowerButton_OnClick(object sender, RoutedEventArgs e)
{
var tc = Mvx.Resolve<TelemetryClient>();
if (null != tc)
{
tc.Flush(); // only for desktop apps
}
Application.Current.Shutdown();
}
或者设置一个 RxTimer 按计划刷新...我决定每 30 分钟刷新一次:
var observable = Observable.Interval(new TimeSpan(0, 0, 30, 0));
observable.Subscribe(_ => Application.Current.Dispatcher.Invoke(new Action(() =>
{
var tc = Mvx.Resolve<TelemetryClient>();
if (null != tc)
{
tc.Flush(); // only for desktop apps
Console.WriteLine("Flush TC");
}
})));
仅供参考 - 从 Application Insights API NuGet 包的 0.17.0 开始,如果您处于脱机状态,则刷新调用不会挂起,但似乎会挂起。在线时,通话立即完成,离线时,通话完成前会停顿 5 秒。
桌面应用程序的 Application Insights (AI) 已被弃用,取而代之的是HockeyApp。它还不算太成熟,但它确实有效(事件基本上到达了 AI 事件所在的地方)。
例如,下面是它在RoslynPad(一个 WPF C# 编辑器)中的样子:
using Microsoft.HockeyApp;
//In your initialization method:
var hockeyClient = (HockeyClient)HockeyClient.Current;
hockeyClient.Configure(HockeyAppId)
.RegisterCustomDispatcherUnhandledExceptionLogic(OnUnhandledDispatcherException)
.UnregisterDefaultUnobservedTaskExceptionHandler();
var platformHelper = (HockeyPlatformHelperWPF)hockeyClient.PlatformHelper;
platformHelper.AppVersion = _currentVersion.ToString();
hockeyClient.TrackEvent("App Start");
//sometime later:
hockeyClient.TrackEvent("Something happened");
编辑看起来需要以下 NuGet 包才能使其正常工作:https ://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaround (请参阅https://github.com/bitstadium/HockeySDK-Windows/拉/88)。