https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/
Официальная ссылка от Microsoft о том, как добавить Application Insights в приложение Windows Forms. По ссылке:
В Azure - portal.azure.com
- Создайте ресурс приложения. :: New / Developer Services / Application Insights.
- Обратите внимание на сгенерированный ключ инструментария, возьмите копию и отложите ее, она нам понадобится при настройке вашего приложения.
В вашем приложении
- NuGet - добавить Application Insights API
- Настройте свой
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);
- Записать событие / экран / исключение и т. Д.
Каждый раз, когда «что-то происходит», я разрешаю 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);
}
- Очистить при выходе из приложения
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