Как вручную изменить файлы рабочих ролей в облаке, выполнив RDP?

Перенос полного проекта облачной службы в облако занимает очень много времени, поэтому, если в нем есть какие-то незначительные изменения, и я хочу, чтобы они немедленно отразились, тогда я подключаю RDP к веб-роли, вношу эти изменения и перезапускаю IIS. Можно ли сделать что-то подобное и для рабочей роли? Я могу RDP и заменить файлы dll, но я не знаю, как перезапустить рабочую роль, поскольку она не работает в IIS. Я не уверен, на чем работает рабочая роль? Я знаю, что это не очень хорошая практика, но поскольку я все еще нахожусь в стадии разработки, это значительно ускорит мой процесс тестирования.

Какие-нибудь простые способы обновить рабочую роль в облаке, а не выполнять полную отправку?


person Bitsian    schedule 26.08.2013    source источник


Ответы (2)


Брент на 100% прав, и я проголосовал за его ответ. Вы должны быть осторожны, чтобы не вносить какие-либо изменения через RDP в рабочую службу. Сказав это, вы упомянули, что это было сделано только для целей тестирования на этапе разработки, и есть большая ценность в возможности обновить один DLL-файл и протестировать его без необходимости повторного развертывания всей облачной службы. Я делаю это все время при устранении неполадок на виртуальной машине Azure.

Проверьте http://blogs.msdn.com/b/kwill/archive/2011/05/05/windows-azure-role-architecture.aspx для архитектуры процессов на виртуальной машине. В частности, обратите внимание, что WaHostBootstrapper является родительским процессом как для рабочих, так и для веб-ролей. Чтобы заменить DLL в веб-ролях или рабочих ролях, лучше всего:

  1. Завершите работу WaHostBootstrapper. Сделать это можно через диспетчер задач.
  2. Замените DLL. Обратите внимание, что вам нужно действовать быстро, потому что Azure автоматически перезапустит все вскоре после того, как вы уничтожите WaHostBootstrapper*.
  3. Подождите, пока WaHostBootstrapper автоматически перезапустится, после чего автоматически перезапустится WaWorkerHost/WaIISHost.

* Если вам нужно больше времени для внесения изменений, вы можете подключить отладчик, такой как WinDBG, к WindowsAzureGuestAgent и оставить его включенным в процесс. Это предотвратит автоматический перезапуск процесса начальной загрузки узла Azure. После внесения изменений вы можете отключить отладчик и позволить WindowsAzureGuestAgent продолжить работу. Обратите внимание: если вы оставите WindowsAzureGuestAgent в остановленном состоянии более чем на 10 минут, агент хоста обнаружит, что виртуальная машина не отвечает, и перезагрузит виртуальную машину.

*Изменить: более подробные инструкции доступны по адресу http://blogs.msdn.com/b/kwill/archive/2013/09/05/how-to-modify-a-running-azure-service.aspx.

person kwill    schedule 26.08.2013
comment
Большое спасибо, это именно то, что я хотел!! Но я не могу найти WaHostBootstrapper в процессах диспетчера задач. Однако существует процесс WindowsAzureGuestAgent, запускает ли он рабочую роль? - person Bitsian; 26.08.2013
comment
Если вы видите WindowsAzureGuestAgent, но не WaHostBootstrapper, вероятно, ваша роль перезапускается. Ознакомьтесь с процессом устранения неполадок на странице blogs.msdn.com/b/kwill/archive/2013/08/20/. - person kwill; 27.08.2013
comment
Если вам нужно остановить его чуть более чем на несколько секунд, вы останавливаете WindowsAzureGuestAgentService, а затем завершаете задачу WaHostBootstrapper. Затем у вас есть 10 минут до перезапуска виртуальной машины. - person Archlight; 19.01.2014

Проще говоря, вы этого не сделаете. Это прямо противоречит природе облачных служб Windows Azure PaaS без сохранения состояния. Если экземпляр роли необходимо переместить, он всегда вернется в исходное развернутое состояние, аннулируя любые внесенные вами изменения. Экземпляры ролей могут быть перемещены в любое время. Таким образом, любая попытка RDP и внесения изменений причинит вам значительную боль.

Если вам действительно нужен этот тип динамического развертывания, вы можете создать сценарий запуска, который извлекает файлы содержимого из внешнего хранилища (например, хранилища BLOB-объектов Windows Azure) и загружает их в экземпляр роли перед запуском.

Сам рабочий процесс — это просто долго работающая консольная программа с начальным процессом, запущенным вызовом из процесса агента Windows Azure на вашей гостевой виртуальной машине метода «OnStart» экземпляра роли.

person BrentDaCodeMonkey    schedule 26.08.2013
comment
Чтобы добавить к этому, то же безгражданство, о котором говорит Брент, касается и веб-ролей. То, что вы делаете для обновления веб-ролей, может работать для вашей разработки или тестирования, но вы никогда не должны делать это для производственных систем. Изменения не будут сохраняться в обновлениях ролей, исправлениях ОС и т. д. Все, что указал Брент. - person MikeWo; 26.08.2013
comment
Спасибо за предупреждение, но я не буду делать такие изменения на рабочем сервере. Поскольку я все еще на стадии разработки, довольно сложно повторно развернуть все, чтобы увидеть некоторые незначительные изменения, поэтому я искал некоторые обходные пути. Я надеюсь, что ответ Квилла поможет. - person Bitsian; 26.08.2013
comment
есть ли здесь какая-то потребность, которую локальный эмулятор не выполняет? - person BrentDaCodeMonkey; 26.08.2013