Visual Studio で記述された WPF アプリケーションがあります。この WPF アプリに Application Insights を追加できますか? ボタン/タイルがクリックされた回数を知りたいです。同じアプリが複数インストールされているので、どのユーザー/インストールでどのボタンが何回クリックされたか知りたいです。これは Application Insights で実行できますか?
ありがとうアバンティ
Visual Studio で記述された WPF アプリケーションがあります。この WPF アプリに Application Insights を追加できますか? ボタン/タイルがクリックされた回数を知りたいです。同じアプリが複数インストールされているので、どのユーザー/インストールでどのボタンが何回クリックされたか知りたいです。これは 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 リソースを作成します。次に、Application Insights ブレードのプロパティ タイルを選択し、インストルメンテーション キーをコピーして、applicationinsights.config ファイルに追加します。ここで説明されているように、WPF アプリで Application Insights SDK を使用できます。プレリリース.aspx
イベントは、アプリケーション インサイト ブレードで選択できる診断検索ブレードに表示されます。
注: テレメトリは、サービスに送信される前に 1 分間ローカルでバッチ処理されます。ただし、500 を超えるテレメトリ イベントが送信される時点でキューに入れられている場合を除きます。
https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/
Application Insights を Windows フォーム アプリケーションに追加する方法に関する Microsoft の公式リンク。リンクから:
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 )。