无法在Azure Web角色中创建自定义性能计数器

时间:2012-02-06 17:08:11

标签: azure performancecounter azure-web-roles

当尝试按照in this MSDN article解释创建自定义性能计数器时,我仍然会遇到安全性异常。

我使用的代码与该文章中的代码相同,只是我创建了一个不同的计数器。

我知道我可以尝试在启动任务中创建它,但是现在我想在角色中执行它...它应该工作:/

例外:

[SecurityException: Requested registry access is not allowed.]
   Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) +12746267
   System.Diagnostics.PerformanceCounterLib.CreateRegistryEntry(String categoryName, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection creationData, Boolean& iniRegistered) +170
   System.Diagnostics.PerformanceCounterLib.RegisterCategory(String categoryName, PerformanceCounterCategoryType categoryType, String categoryHelp, CounterCreationDataCollection creationData) +49
   System.Diagnostics.PerformanceCounterCategory.Create(String categoryName, String categoryHelp, PerformanceCounterCategoryType categoryType, CounterCreationDataCollection counterData) +558

ServiceDefinition.csdef的开头:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Jonathan.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebDriver" vmsize="Small" enableNativeCodeExecution="true">
    <Runtime executionContext="elevated" />

当我进入角色时,我可以看到应用程序池仍然使用NetworkService身份运行,期望它在不同的主体下运行,因为我将角色更改为“提升” - 手动设置自定义具有权限的主体解决了这个问题,但是一旦角色重新配置自身或者我部署升级它将会被覆盖 - 无论如何,这不是一个真正的解决方案,而是一个黑客:/ [沮丧]

1 个答案:

答案 0 :(得分:2)

对于完全IIS的Web角色,您在Runtime元素中指定的特权将应用于RoleEntoryPoint。我认为有必要通过内部RoleEntryPoint(通常是WebRole.cs)OnStart方法注册自定义性能计数器。