10
votes

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?

1
This might be because of the empty <InstrumentationKey> element in ApplicationInsights.config. Removed the element completely, and it seems to work now.Ted Nyberg
This blog post helped me to clear up some details: apmtips.com/blog/2015/06/09/do-not-use-context-initializersTom Robinson

1 Answers

13
votes

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.