Revisited March 2020
An Azure solution I was working on had a .Net console application which ran on a server at the customer’s premises. It was scheduled task that uploaded some files to azure blob storage every 5 minutes.
To help with debugging I added support for Azure application Insights but after monitoring the application for a while I noticed some shutdown events were not getting uploaded.
Initially I was a bit confused because when I ran the application on my desktop it worked fine (It works on my machine). I found this was because when launched from the debugger the application would upload any files it found then wait until I pressed to exit and this was enough time for the shutdown messages to get uploaded.
The code for a smallest example application is below (I pass the instrumentation key as a command line parameter).
//--------------------------------------------------------------------------------- // Copyright (c) 2018, devMobile Software // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //--------------------------------------------------------------------------------- using System; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; namespace devMobile.Azure.ApplicationInsightsClientConsole { class Program { static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Command line argument InstrumentationKey missing"); return; } TelemetryConfiguration.Active.InstrumentationKey = args[0]; TelemetryClient telemetryClient = new TelemetryClient(); telemetryClient.TrackTrace("This is Application Insights native"); telemetryClient.TrackTrace("Application startup"); // application does stuff telemetryClient.TrackTrace("Application shutdown"); telemetryClient.Flush(); } } }Sample project AzureApplicationInsightsClientConsole