Невозможно создать настраиваемые счетчики производительности в веб-роли Azure.

При попытке создать собственные счетчики производительности, как описано в этой статье MSDN. , я все еще получаю исключение безопасности.

Код, который я использую, такой же, как и в этой статье, только я создаю другие счетчики.

Я понимаю, что я могу попробовать создать его в задаче запуска, но пока я хочу сделать это внутри роли.. это должно работать :/

Исключение:

[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" />

Когда я вхожу в роль RDP, я вижу, что пул приложений все еще работает с идентификатором NetworkService, ожидал, что он будет работать под другим принципалом, поскольку я изменил роль на «повышенную» — вручную настраивая собственный субъект с разрешениями. решает это, но это будет переопределено, как только роль перенастроится или если я разверну обновление - в любом случае это не решение, а взлом: / [разочарованный]


person Jonathan Levison    schedule 06.02.2012    source источник
comment
Вы пытались использовать командлеты Windows Azure Powershell вместо того, чтобы самостоятельно создавать оболочку API управления? Вот статья Дэвида Эйкена о том, как удаленно настроить диагностическую информацию с помощью PowerShell. davidaiken.com/2011 /18.10.   -  person cory-fowler    schedule 06.02.2012


Ответы (1)


В случае веб-роли полного IIS к RoleEntoryPoint применяется специальная привилегия, которую вы назначили в элементе Runtime. Я думаю, что необходимо зарегистрировать пользовательский счетчик производительности по внутреннему методу RoleEntryPoint (обычно WebRole.cs) OnStart.

person kosmos.ebi    schedule 06.02.2012
comment
Вы правы, это сработало! :) Я переместил код, который инициализирует счетчики, в OnStart() of RoleEntryPoint, удалил существующее развертывание, чтобы убедиться, что я начинаю чистый, и опубликовал его - работает и зарегистрировал счетчики. - person Jonathan Levison; 07.02.2012
comment
Не забудьте также включить конфигурацию ‹Runtime executeContext=elevated /› в ваш файл .csdef (как в вашем примере). - person Davide Icardi; 12.02.2013