Azure: как выполнить задачу запуска с задержкой? - PullRequest
2 голосов
/ 27 ноября 2011

У меня есть два сайта в моей WebRole, и я определил задачу запуска.

Первая строка работает нормально, она создает для меня новый пул приложений:

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"

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

%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

Кажется, второй сайт как-то еще не готов.

Как мне отложить задачу на 30 секунд или немного задержать appcmd.exe?Если нет способа создать зависимости для этой задачи запуска, которая будет выполняться только тогда, когда этот второй сайт запущен и работает?

Любая помощь будет высоко оценена, Большое спасибо,

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

Обновление:

Спасибо за подсказки.Я провел дополнительное расследование по этому вопросу.Я обнаружил событие OnStart ().

1) Но поскольку я использую silverlight и просто оборачиваю существующий веб-проект в проект Cloud Roles, у меня не будет WebRole.cs как такового.Могу ли я просто добавить его в свой веб-проект Silverlight и использовать там?Или рекомендуется создать проект WebRole с нуля и полностью заменить веб-проект Silverlight?

2) Что касается тега <Runtime/> в определении службы, могу ли я просто добавить его следующим образом?Будет ли это иметь какие-либо последствия для безопасности, когда веб-ролик будет работать с повышенными правами?

<WebRole name="WebRole" enableNativeCodeExecution="true" vmsize="ExtraSmall">
    <Runtime executionContext="elevated"/>
    <Sites>
      <Site name="WebRole" physicalDirectory="./WebRole">
      ...
    </Sites>
</WebRole>

3) И последнее, но не менее важное: как запустить файл cmd или на самом деле эту строку

%WINDIR%\system32\inetsrv\appcmd.exe set site /site.name:"WebRole_IN_0_VC" /[Path='/'].applicationPool:"ASP.NET v4.0" >>Log.txt

вМетод OnStart ()?

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Можете ли вы изучить использование сценариев PowerShell для выполнения этих задач. В PowerShell есть способ усыпить поток. Что-то вроде

Пакетный файл

%WINDIR%\system32\inetsrv\appcmd.exe add apppool /name:"VCPool" /managedRuntimeVersion:"v4.0" /managedPipelineMode:"Integrated"
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out 
powershell .\sleep.ps1 2>> err.out
%WINDIR%\system32\inetsrv\appcmd.exe set app "WebRole_IN_0_VC/" /applicationPool:"VCPool"

Я не пробовал, но должно работать. См. сообщение , чтобы узнать об интеграции Powershell.

2 голосов
/ 27 ноября 2011

Сайт, как вы обнаружили, создается после запуска раздела «Задача».Вместо этого запустите ваш код из события OnStart.Сайт будет создан к этому моменту.Возможно, вам потребуется обновить файл определения службы, чтобы ваша роль была повышена. Это можно сделать, добавив этот тег:

<Runtime executionContext="elevated"/>

Отредактировано

Чтобы ответить на вашдополнительные вопросы:

1) Каким бы ни был ваш проект, вы просто сможете добавить класс RoleEntryPoint.Возможно, вам придется сделать это вручную.

2) Добавление тега времени выполнения не добавит значительного риска для вашего развертывания.

3) Создайте cmd-файл для ввода вашей команды (т.е.OnStart.cmd) и используйте некоторый код, подобный следующему:

System.Diagnostics.Process.Start("OnStart.cmd")

Дополнительная информация о запуске процесса приведена здесь: http://msdn.microsoft.com/en-us/library/53ezey2s.aspx

1 голос
/ 16 июля 2012

Для тех, кто интересуется ... Я только что написал в блоге о том, как выполнять задачи запуска AppCmd ​​в Windows Azure, настраивать веб-сайты IIS - включая поиск сайта по имени веб-роли и выполнение его с задержкой, так что конфигурация сайта уже создана IISConfigurator Azure. .exe.

Подробнее здесь: http://mvolo.com/configure-iis-websites-windows-azure-startup-tasks-appcmd/.

Спасибо, Mike

...