2014-10-22 92 views
19

在Visual Studio中有一個WPF應用程序。 我可以將Application Insights添加到此WPF應用程序嗎? 我想知道點擊了多少次按鈕/瓷磚。由於同一個應用程序有多個安裝 ,我想知道哪個按鈕被點擊了多少次,從哪個用戶/安裝。這可以通過Application Insights完成嗎?WPF應用程序的應用程序見解

由於 阿凡提

+0

@Sinatr你打算如何從你的客戶那裏得到這些日誌給你?而如果你有一百萬個客戶,你打算在Excel中打開一百萬個csv文件嗎?看看AI分析,它是一個完整的級別:https://azure.microsoft.com/en-us/documentation/articles/app-insights-analytics/ – 2016-08-12 16:53:49

回答

30

雖然沒有支持的應用類型列出這意味着不是默認收集遙測數據/發送到應用的見解也沒有用於將AI /創建應用程序的見解資源支持。這就是說可以通過一些手動步驟添加到WPF中,以便您可以跟蹤您提到的特定場景(如按鈕/平鋪單擊)。

-From 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應用程序,你可以使用應用程序洞察SDK如下所述:http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

您的活動將是它可以在刀片的見解應用選擇診斷搜索刀片可見。

注意:在發送到服務之前,遙測在本地進行1分鐘批處理,除非> 500個遙測事件在發送它們的位置排隊。

+0

應用程序關閉時,批處理事件如何?異常是批處理還是立即發送? – Guillaume 2015-01-02 10:14:00

+0

感謝您的回答,這讓我足夠了解我需要知道的其他內容。 – 2015-02-08 20:50:01

9

從微軟如何添加應用洞察Windows窗體應用程序的官方鏈接。從鏈接:

在Azure中 - portal.azure.com

  1. 創建應用程序資源。 :: New/Developer Services/Application Insights。
  2. 注意生成的檢測密鑰,獲取副本並將其放在一邊,我們在配置應用程序時需要它。

在你的應用

  1. 的NuGet - 新增 '應用程序洞察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); 
  • 記錄的事件/屏幕/異常等
  • 任何時候, '有事',我會解決TelemetryClient並記錄事件。這與任何其他應用程序見解實施有關的跟蹤和記錄。

    爲例 -

    //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桌面應用程序不會自動收集/發送任何東西。作爲開發人員,在應用程序退出時需要強制刷新。

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

    僅供參考 - 作爲應用洞察API NuGet包的0.17.0或更新版本,如果你處於脫機狀態的清除呼叫不會掛起,但似乎是。在線,呼叫立即結束,離線呼叫完成前有5秒的暫停。

    +0

    您認爲SDK版本掛起了什麼? – 2015-06-18 05:18:16

    +0

    您關於AI不會自動發送事件的說明與接受的答案(由MS eployee寫的人合作,在AI團隊中工作):*遙測在本地批處理1分鐘後再發送到服務器,除非> 500個遙測事件在發送*時排隊。所以我猜你設置的計時器是不必要的,並且在應用程序退出時刷新就足夠了。 – 2016-08-12 16:50:51

    7

    桌面應用程序的應用程序見解(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/pull/88 )。

    +0

    workarond軟件包不再可用。 – 2017-05-20 15:12:00

    +0

    @MicheleFerracin你仍然可以使用這個包,它只是不會出現在搜索結果中。作者將其刪除是因爲這是一個冒險的解決方案,他轉而直接在RP中使用AI(您可以在GitHub上查看他的代碼或查看上面的答案)。 – 2017-05-24 11:30:35