Application Insights для приложения WPF

Есть приложение WPF, написанное на Visual Studio. Могу ли я добавить Application Insights в это приложение WPF? Я хотел бы знать, сколько раз нажимается кнопка / плитка. Поскольку существует несколько установок одного и того же приложения, я хотел бы знать, какая кнопка была нажата, сколько раз у какого пользователя / установки. Можно ли это сделать с помощью Application Insights?

Спасибо Аванти


person Avanti Ajay    schedule 22.10.2014    source источник
comment
@Sinatr Как вы собираетесь получить эти журналы от вашего клиента? А что, если у вас миллион клиентов, вы собираетесь открыть миллион файлов CSV в Excel? Взгляните на аналитику ИИ, это совсем другой уровень: azure.microsoft.com/en-us/documentation/articles/   -  person Ohad Schneider    schedule 12.08.2016


Ответы (3)


Хотя это не указано в списке поддерживаемых типов приложений, это означает, что данные телеметрии по умолчанию не собираются / не отправляются в аналитические отчеты приложений, а также не поддерживается добавление ИИ / создание ресурса аналитических данных приложения. При этом можно добавить в свой WPF с помощью нескольких ручных шагов, чтобы вы могли отслеживать конкретные сценарии, которые вы упоминаете (например, нажатие кнопки / плитки).

-Из Visual Studio добавьте в проект NuGet Application Insights API (.11 - последняя версия на сегодняшний день).

Это добавит справочник по API Application Insights и создаст файл конфигурации 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>

Чтобы создать ключ инструментария приложения Insights, войдите в свою подписку на Azure. https://portal.azure.com Щелкните +, чтобы создать ресурс Application Insights. Затем выберите плитку свойств в колонке Application Insights, скопируйте ключ Instrumentation и добавьте его в файл applicationinsights.config. Теперь в своем приложении WPF вы можете использовать SDK Application Insights, как описано здесь: http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

Ваши события будут отображаться в колонке диагностического поиска, которую можно выбрать в колонке аналитики приложения.

Примечание: телеметрия группируется локально в течение 1 минуты перед отправкой в ​​службу, если в очереди не поставлено> 500 событий телеметрии, после чего они отправляются.

person vladjoanovic    schedule 29.10.2014
comment
Как насчет пакетного события при закрытии приложения? Исключения группируются или отправляются немедленно? - person Guillaume; 02.01.2015
comment
Спасибо за ответ, я получил достаточно далеко, чтобы понять остальное, что мне нужно было знать. - person David Parvin; 08.02.2015

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

Официальная ссылка от Microsoft о том, как добавить Application Insights в приложение Windows Forms. По ссылке:

В Azure - portal.azure.com

  1. Создайте ресурс приложения. :: New / Developer Services / Application Insights.
  2. Обратите внимание на сгенерированный ключ инструментария, возьмите копию и отложите ее, она нам понадобится при настройке вашего приложения.

В вашем приложении

  1. NuGet - добавить Application Insights API
  2. Настройте свой TelemetryClient.

Я использую MvvmCross в приложении WPF, при запуске я создаю один 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. Очистить при выходе из приложения

Application Insights для настольных приложений 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");
    }
})));

К вашему сведению. Начиная с версии 0.17.0 пакета NuGet Application Insights API, если вы находитесь в автономном режиме, вызов сброса не зависает, но кажется. В режиме онлайн вызов завершается немедленно, в автономном режиме перед завершением звонка длится сплошная 5-секундная пауза.

person ben    schedule 16.06.2015
comment
Ваше примечание о том, что ИИ не отправляет события автоматически, противоречит принятому ответу (написанному специалистом MS, который явно работает в команде ИИ): телеметрия пакетируется локально в течение 1 минуты перед отправкой в ​​службу, если не ›500 событий телеметрии в очереди, после чего они отправляются. Поэтому я предполагаю, что установленный вами таймер не нужен, и сброса при выходе из приложения должно быть достаточно. - person Ohad Schneider; 12.08.2016
comment
@Vadim Можете ли вы помочь мне зарегистрировать его на Prism? - person fatihyildizhan; 30.01.2020

Application Insights (AI) для настольных приложений заменяется HockeyApp. Он еще не слишком зрел, но работает (события по сути достигают того же места, что и события ИИ).

Например, вот как это выглядит в

ИЗМЕНИТЬ Похоже, для правильной работы требуется следующий пакет NuGet: https://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaround (см. https://github.com/bitstadium/HockeySDK-Windows/pull/88).

person Ohad Schneider    schedule 12.08.2016
comment
@MicheleFerracin, вы все еще можете использовать пакет, он просто не отображается в результатах поиска. Автор удалил его, потому что это было хакерское решение, и он перешел к использованию AI непосредственно в RP (вы можете проверить его код на GitHub или увидеть ответы выше). - person Ohad Schneider; 24.05.2017