web-dev-qa-db-ja.com

WPFアプリケーションのApplication Insights

Visual Studioで記述されたWPFアプリケーションがあります。このWPFアプリにApplication Insightsを追加できますか?ボタン/タイルがクリックされた回数を知りたい。同じアプリケーションの複数のインストールがあるため、どのユーザー/インストールから、どのボタンが何回クリックされたかを知りたいです。これはApplication Insightsで実行できますか?

おかげでAvanti

25
Avanti Ajay

サポートされているアプリの種類としてリストされていませんが、これは、アプリケーションインサイトに収集/送信されるデフォルトのテレメトリデータがないこと、またはAIの追加/アプリケーションインサイトリソースの作成のサポートがないことを意味します。言われている特定のシナリオ(ボタン/タイルクリックなど)を追跡できるように、いくつかの手動手順でWPFに追加することができると言われています。

-Visual Studioから「Application Insights API」NuGetをプロジェクトに追加します(.11が今日最新です)。

これにより、Application Insights APIリファレンスが追加され、プロジェクトにApplication Insights構成ファイルが作成されます。

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リソースを作成します。次に、アプリケーションインサイトブレードのプロパティタイルを選択し、インストルメンテーションキーをコピーして、applicationinsights.configファイルに追加します。これで、WPFアプリで、Application Insights sdkを次のように使用できます: http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0- 11-0-prerelease.aspx

イベントは、アプリケーションの洞察ブレードで選択できる診断検索ブレードに表示されます。

注:テレメトリは、500を超えるテレメトリイベントがキューに入れられて送信されない限り、サービスに送信される前に1分間ローカルでバッチ処理されます。

31
vladjoanovic

https://Azure.Microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/

Application InsightsをWindowsフォームアプリケーションに追加する方法に関するMicrosoftの公式リンク。リンクから:

Azure-portal.Azure.com

  1. アプリケーションリソースを作成します。 :: New/Developer Services/Application Insights。
  2. 生成されたインストルメンテーションキーに注意して、コピーを取得して脇に置いてください。アプリケーションを構成するときに必要になります。

あなたのアプリケーションで

  1. NuGet-'Application Insights API'を追加
  2. 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);
  1. イベント/画面/例外などを記録する

「何かが起こった」ときはいつでも、私は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);
}
  1. アプリケーション終了時にフラッシュ

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");
    }
})));

FYI-Application Insights API NuGetパッケージの0.17.0以降、オフラインの場合、フラッシュ呼び出しはハングしませんがハングしているようです。オンラインの場合、通話はすぐに完了し、オフラインの場合、通話が完了する前に5秒間しっかりと停止します。

12
ben

デスクトップアプリケーション用の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");

[〜#〜] edit [〜#〜]これが正しく機能するには、次のNuGetパッケージが必要であるように見えます: https ://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaroundhttps://github.com/bitstadium/HockeySDK-Windows/pull/88 を参照)。

5
Ohad Schneider