我有一个简单的Windows Univeral Application,其中启用了Azure Application Insights。首次发布的版本运行良好 - 所有遥测数据在AppInsights仪表板中都可见。但在我更新应用程序后,发生了奇怪的事情 - 根本没有生成遥测数据。
从Windows应用商店安装应用程序版本并使用Fiddler跟踪Web请求后,我发现非常奇怪的事情 - 在AppInsights请求中发送的检测密钥(iKey)对我来说是未知的。我的意思是,这不是我的AppInsights实例之一!
另一方面,当我侧载我用于发布的相同包时,正确(预期)iKey用于跟踪的Web请求。
这让我觉得我的iKey在发布的应用程序版本中被某种方式取代了。 这怎么可能?
重要提示: AppInsights初始化代码如下(在App类中):
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
var instrumentationKey =
#if DEBUG
Current.Resources["ApplicationInsights.InstrumentationKey.Debug"].ToString();
#else
Current.Resources["ApplicationInsights.InstrumentationKey.Release"].ToString();
#endif
Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(instrumentationKey);
// ...
}
又一次 - 这在应用程序的第一个版本中运行良好,并且仅在更新后才被破坏(没有触及任何AppInsights相关的东西)。
更新(2016-03-21):根据答案中的建议,我已完成以下操作:
更改初始化逻辑,仅在调试模式下替换iKey:
protected override void OnLaunched(LaunchActivatedEventArgs e)
{
#if DEBUG
var instrumentationKey = Current.Resources["ApplicationInsights.InstrumentationKey.Debug"].ToString();
await Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(instrumentationKey);
#else
await Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync()
#endif
// ...
}
现在AppInsights工作正常 - 我的iKey用于AppInsights网络请求,数据显示在管理面板中。
答案 0 :(得分:1)
您的项目中是否有applicationinsights.config文件?
如果您不这样做,我相信商店将为您创建一个,以便报告有效,因为它不知道您在代码中设置密钥。您可能想要添加applicationinsights.config文件,并放入其中一个ikeys,即使您在代码中明确设置了该键。
答案 1 :(得分:1)
适用于商店应用的ApplicationInsights SDK仅适用于ApplicationInsights.config。
Store会查找此文件,如果未设置检测项,则会注入一个。
另一方面,SDK将始终遵守来自配置文件的检测密钥。