tutorial que hechas español ejemplos aplicaciones wpf visual-studio azure-devops azure-application-insights

que - Información sobre la aplicación para la aplicación WPF



wpf tutorial español (3)

Hay una aplicación WPF escrita en Visual Studio. ¿Puedo agregar Application Insights a esta aplicación WPF? Me gustaría saber cuántas veces se hace clic en un botón / mosaico. Como hay varias instalaciones de la misma aplicación, me gustaría saber en qué botón se hizo clic en cuántas veces desde qué usuario / instalación. ¿Se puede hacer esto con Application Insights?

Gracias avanti


Application Insights (AI) para aplicaciones de escritorio está en desuso en favor de HockeyApp . Aún no está demasiado maduro, pero funciona (los eventos esencialmente llegan al mismo lugar donde van los eventos de AI).

Por ejemplo, así es como se ve en RoslynPad (un editor de C # de WPF):

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

EDITAR Parece que se requiere el siguiente paquete NuGet para que esto funcione correctamente: https://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaround (vea https://github.com/bitstadium/HockeySDK-Windows/pull/88 ).


Si bien no aparece en la lista como un tipo de aplicación compatible, esto significa que no se recopilan / envían datos de telemetría predeterminados a las perspectivas de la aplicación, ni hay soporte para agregar AI / crear un recurso de información de la aplicación. Dicho esto, es posible agregar a su WPF con unos pocos pasos manuales para que pueda hacer un seguimiento de los escenarios específicos que menciona (como un botón / clic de mosaico).

-Desde Visual Studio, agregue "Application Insights API" NuGet al proyecto (.11 es el más reciente hoy).

Esto agregará la referencia de API de Application Insights y creará un archivo de configuración de Application Insights para su proyecto.

El archivo applicationinsights.config debe actualizarse con su clave de instrumentación de la siguiente manera:

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

Para crear una clave de instrumentación de insights de aplicación, inicie sesión en su suscripción azul. https://portal.azure.com Haga clic en + para crear un recurso de Application Insights. Luego, elija el mosaico de propiedades en la hoja de información de la aplicación, copie la clave de Instrumentación y agréguela a su archivo applicationinsights.config. Ahora, en su aplicación WPF, puede usar el Application Insights sdk como se describe aquí: http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

Sus eventos serán visibles en la hoja de búsqueda de diagnóstico que se puede seleccionar en la hoja de información de la aplicación.

Nota: la telemetría se procesa localmente durante 1 minuto antes de enviarse al servicio a menos que se pongan en cola más de 500 eventos de telemetría en qué momento se envían.


https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/

Un enlace oficial de Microsoft sobre cómo agregar Application Insights a una aplicación de Windows Forms. Desde el enlace:

En Azure - portal.azure.com

  1. Crear un recurso de aplicación. :: Nuevo / Servicios para desarrolladores / Application Insights.
  2. Note la clave de instrumentación generada, tome una copia y déjela a un lado, la necesitaremos cuando configuremos su aplicación.

En su aplicacion

  1. NuGet - Añadir ''Application Insights API''
  2. Configure su TelemetryClient .

Estoy usando MvvmCross en una aplicación WPF, al inicio creo un único TelemetryClient que reutilizo en toda la aplicación.

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. Grabar un evento / pantalla / excepción, etc.

Cada vez que ocurra algo, resolveré el TelemetryClient y registraré el evento. Esto es como cualquier otra implementación de Application Insights con respecto al seguimiento y la grabación.

Como ejemplo -

//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. Lavar en la aplicación Salir

Application Insights para aplicaciones de escritorio de Windows no recopila / envía nada automáticamente. Como desarrollador, uno necesita forzar un lavado al salir de la aplicación.

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

O instale un RxTimer para que salga en un horario ... Decidí descargar cada 30 minutos:

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: a partir de la versión 0.17.0 del paquete NuGet de la API de Application Insights, si está desconectado, la llamada no se bloquea, pero parece que sí. En línea, la llamada se completa de inmediato, sin conexión, hay una pausa de 5 segundos antes de que finalice la llamada.