Programmatically setting Application Insights instrumentation key throws error

Ted Nyberg picture Ted Nyberg · Jul 17, 2015 · Viewed 8.8k times · Source

To support Application Insights in multiple environments, we are setting the Instrumentation Key programmatically, as adviced in this post.

We have left <InstrumentationKey> in ApplicationInsights.config empty, and instead added an application setting in web.config:

<add key="ApplicationInsightsInstrumentationKey" value="1234-5678-9xxx" />

In Application_Start we do the following to set the instrumentation key:

var instrumentationKey = ConfigurationManager.AppSettings["ApplicationInsightsInstrumentationKey"];

if (string.IsNullOrWhiteSpace(instrumentationKey))
{
    throw new ConfigurationErrorsException("Missing app setting 'ApplicationInsightsInstrumentationKey' used for Application Insights");
}

TelemetryConfiguration.Active.InstrumentationKey = instrumentationKey;

new TelemetryClient().TrackEvent("Application started");

However, this produces an exception saying "TelemetryChannel must be initialized before it can send telemetry".

Googling this exception message yields nothing, but I guess there's something additional required before events can be tracked?

Answer

BrettJ picture BrettJ · Jul 18, 2015

Removing the <InstrumentationKey /> element from ApplicationInsights.config seems to do the trick.

I've done the exact same thing, setting the iKey in Application_Start() for a web application, and before I new() up a TelemetryClient in console applications. I do not have any element in my ApplicationInsights.config, not even a blank one. I keep a comment in that config file that says the key is being set programmatically.