2014-10-22 13 views
19

Có một ứng dụng WPF được viết bằng Visual Studio. Tôi có thể thêm Thông tin chi tiết về ứng dụng vào ứng dụng WPF này không? Tôi muốn biết số lần nút/ô được nhấp. Vì có nhiều cài đặt của cùng một ứng dụng, tôi muốn biết nút nào đã được nhấp bao nhiêu lần từ người dùng/cài đặt nào. Điều này có thể được thực hiện với Thông tin chi tiết về ứng dụng không?Ứng dụng Insights cho ứng dụng WPF

Cảm ơn Avanti

+0

@Sinatr Bạn sẽ nhận được các nhật ký đó từ khách hàng của mình với bạn như thế nào? Và nếu bạn có một triệu khách hàng, bạn sẽ mở một triệu tệp csv trong excel? Hãy xem AI analytics, đó là cấp độ toàn diện: https://azure.microsoft.com/en-us/documentation/articles/app-insights-analytics/ –

Trả lời

30

Trong khi không được liệt kê như là một loại ứng dụng hỗ trợ điều này có nghĩa là không mặc định dữ liệu từ xa thu thập/gửi đến những hiểu biết ứng dụng cũng không có hỗ trợ cho việc thêm AI/tạo ra một nguồn hiểu biết ứng dụng. Điều đó đang được nói rằng nó có thể thêm vào WPF của bạn với một vài bước thủ công để bạn có thể theo dõi các kịch bản cụ thể mà bạn đề cập (như một nút bấm/gạch).

-From Visual studio thêm NuGet "Application Insights API" vào dự án (.11 là mới nhất hiện nay).

Thao tác này sẽ thêm tham chiếu API ứng dụng chi tiết và tạo tệp cấu hình thông tin chi tiết về ứng dụng cho dự án của bạn.

tập tin Các applicationinsights.config cần được cập nhật với phím nhạc cụ của bạn như sau:

<?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> 

Để tạo ra một cái nhìn ứng dụng thiết bị đo đạc đăng nhập chìa khóa để thuê bao xanh của bạn. https://portal.azure.com Nhấp vào + để tạo tài nguyên Thông tin chi tiết về ứng dụng. Sau đó chọn ô thuộc tính trên lưỡi thông tin chi tiết về ứng dụng và sao chép khóa Instrumentation và thêm nó vào tệp applicationinsights.config của bạn. Bây giờ trong ứng dụng WPF của bạn, bạn có thể sử dụng sdk Ứng dụng Insights như được mô tả tại đây: http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

lưỡi tìm kiếm chẩn đoán có thể được chọn trên lưỡi thông tin chi tiết về ứng dụng.

Lưu ý: đo từ xa được ghép cục bộ trong 1 phút trước khi được gửi đến dịch vụ trừ khi> 500 sự kiện đo từ xa được xếp hàng tại thời điểm chúng được gửi.

+0

Điều gì về sự kiện theo đợt khi ứng dụng bị đóng? Các trường hợp ngoại lệ có được sắp xếp hoặc gửi ngay lập tức không? – Guillaume

+0

Cảm ơn câu trả lời, nó đã cho tôi đủ xa để tôi tìm ra phần còn lại tôi cần biết. –

9

Một liên kết chính thức từ Microsoft về cách thêm thông tin chi tiết Áp dụng đối với một ứng dụng Windows Forms. Từ liên kết:

Trong Azure - portal.azure.com

  1. Tạo một tài nguyên ứng dụng. :: Dịch vụ mới/nhà phát triển/Thông tin chi tiết về ứng dụng.
  2. Lưu ý rằng khóa công cụ được tạo, lấy một bản sao và đặt sang một bên, chúng tôi sẽ cần nó khi chúng tôi định cấu hình ứng dụng của bạn.

Trong ứng dụng của bạn

  1. NuGet - Thêm 'Application Insights API'
  2. Cấu hình TelemetryClient của bạn.

Tôi đang sử dụng MvvmCross trong ứng dụng WPF, khi khởi động tôi tạo một đơn TelemetryClient mà tôi sử dụng lại trong suốt ứng dụng.

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. Ghi một sự kiện/màn hình/ngoại lệ, vv

Bất cứ lúc nào 'một cái gì đó sẽ xảy ra' Tôi sẽ giải quyết TelemetryClient và ghi lại sự kiện này. Điều này giống như bất kỳ triển khai Ứng dụng thông tin chi tiết nào khác liên quan đến theo dõi và ghi lại.

Như một ví dụ -

//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. Flush trên Thoát ứng dụng

Application Insights for ứng dụng Windows Desktop không tự động thu thập/gửi bất cứ điều gì. Là một nhà phát triển, một trong những nhu cầu để buộc một tuôn ra tại lối ra ứng dụng.

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

Hoặc thiết lập một RxTimer để tuôn ra theo một lịch trình ... Tôi quyết định để tuôn ra mỗi 30 phút:

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 - Tính đến 0.17.0 của ứng dụng Insights API NuGet Package nếu bạn đang ẩn cuộc gọi tuôn ra không treo, nhưng dường như. Trực tuyến, cuộc gọi hoàn tất ngay lập tức, ngoại tuyến có thời gian tạm dừng 5 giây trước khi cuộc gọi kết thúc.

+0

Trong phiên bản SDK nào bạn thấy nó bị treo? .. –

+0

Lưu ý của bạn về AI không tự động gửi các sự kiện xung đột với câu trả lời được chấp nhận (được viết bởi một người sử dụng MS làm việc trong nhóm AI): * đo từ xa được ghép cục bộ cho 1 phút trước khi được gửi đến dịch vụ trừ khi> 500 sự kiện đo từ xa được xếp hàng tại thời điểm chúng được gửi *. Vì vậy, tôi đoán bộ đếm thời gian bạn đặt là không cần thiết và xả ra khi thoát ứng dụng là đủ. –

7

Thông tin chi tiết về ứng dụng (AI) cho các ứng dụng dành cho máy tính để bàn không được sử dụng để ủng hộ HockeyApp. Nó không quá trưởng thành, nhưng nó hoạt động (các sự kiện về cơ bản đạt đến cùng một vị trí sự kiện AI đi).

Ví dụ, dưới đây là cách có vẻ trong RoslynPad (một WPF C# Editor):

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 Hình như gói NuGet sau là cần thiết để cho tiện làm việc đúng cách: https://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaround (xem https://github.com/bitstadium/HockeySDK-Windows/pull/88).

+0

Gói workarond không còn khả dụng nữa. –

+0

@MicheleFerracin bạn vẫn có thể sử dụng gói, nó chỉ không xuất hiện trong kết quả tìm kiếm. Tác giả loại bỏ nó bởi vì nó là một giải pháp hacky và ông chuyển sang sử dụng AI trực tiếp trong RP (bạn có thể kiểm tra mã của mình trên GitHub hoặc xem câu trả lời ở trên). –

Các vấn đề liên quan