Как перезапустить экземпляры в локальном эмуляторе Azure?

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

Как перезапустить или закрыть определенные экземпляры в локальном эмуляторе Azure? Я использую SDK 1.7.

Спасибо,


person Jonas Stawski    schedule 24.08.2012    source источник


Ответы (2)


Я должен не согласиться с ответом Дэвида здесь. Есть несколько вещей, которые вы можете сделать, чтобы закрыть экземпляры или создать новые экземпляры.

Выключение/убийство экземпляров

Когда вы запускаете свое приложение в эмуляторе, оно запускает 1 процесс веб-роли (WaIISHost.exe)/рабочей роли (WaWorkerHost.exe) для каждого экземпляра:

введите здесь описание изображения

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

введите здесь описание изображения

Когда отладчик подключен, вы увидите, как это происходит, и экземпляр никогда не перезапускается, что позволяет вам тестировать сценарии, в которых вы внезапно теряете один или несколько экземпляров. Если отладчик не подключен, все это произойдет очень быстро, и экземпляр сразу же перезапустится (в Visual Studio вы можете выбрать запуск без отладки).

Увеличение или уменьшение количества экземпляров

С помощью csrun.exe (обычно находится в папке C:\Program Files\Microsoft SDK\Windows Azure\Emulator) вы можете обновить конфигурацию службы в эмуляторе, включая количество экземпляров. Допустим, я хочу добавить 6 экземпляров к 4 экземплярам, ​​которые у меня есть на данный момент.

Я открываю файл ServiceConfiguration.cscfg, расположенный в папке Debug вашего проекта Azure (..\Some\Path\MultipleInstancesDemo\MultipleInstancesDemo\bin\Debug), и изменяю количество экземпляров на 10:

<ServiceConfiguration serviceName="MultipleInstancesDemo" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*" schemaVersion="2012-05.1.7">
  <Role name="MyWebRole">
    <Instances count="10" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

Затем можно отправить это в эмулятор, предоставив csrun.exe идентификатор развертывания и путь к файлу конфигурации. Вы найдете идентификатор развертывания в эмуляторе. На предыдущем снимке экрана вы видите deployment17(20), это означает, что идентификатор развертывания равен 20. Вот как вы бы назвали csrun.exe: csrun /update:20;"..\Some\Path\MultipleInstancesDemo\MultipleInstancesDemo\bin\Debug\SeviceConfiguration.cscfg"

Через несколько секунд вы увидите новые экземпляры в эмуляторе:

введите здесь описание изображения

Примечание! Также здесь кажется, что это работает только тогда, когда вы запускаете проект без отладки.

person Sandrino Di Mattia    schedule 24.08.2012
comment
Отличный ответ. Следующая версия должна позволять легко щелкнуть правой кнопкой мыши экземпляр и выполнить такие действия, как его перезапуск или выключение. Таким образом, мы можем проверить наличие непредвиденных событий, таких как аппаратные сбои или исправление обновлений. - person Jonas Stawski; 25.08.2012

Вы не можете закрыть определенные экземпляры; вы можете только уменьшить общее количество запущенных экземпляров.

Если вы хотите перезапустить работающий экземпляр, вы можете вызвать:

RoleEnvironment.RequestRecycle();
person David Makogon    schedule 24.08.2012