Веб-роль в Windows Azure и побочные эффекты iisreset
Я заметил, что когда вы RDP к экземпляру веб-роли в Windows Azure, чтобы сделать iisreset
, World Wide Web Publishing Service
завершает работу, и единственный способ восстановить и запустить вашу роль - перезапустить вышеупомянутую службу или перекатить / перезапустить ваш экземпляр.
По неизвестным мне причинам в Windows Azure по умолчанию установлен режим запуска World Wide Web Publishing Service
в Manual
почему iisreset
Сортируй, оставь свою веб-роль недоступной для WWW.
Я нашел решение этого - IMO - странного поведения и ответил на первоначальный вопрос этого поста.
Однако есть ли альтернатива iisreset
в Windows Azure - может быть, программно, где я могу определить точный экземпляр? Потому что это другая проблема; теперь я должен использовать RDP для каждого экземпляра... было бы хорошо, если бы можно было точно определить каждый экземпляр.
Думаю об этом; у меня есть CNAME для www.awesome-azure.com; он размещается в трех экземплярах в циклическом цикле, и я хочу сбросить / контролировать / диагностировать / сердцебиение каждого из них через REST API (или аналогично), а не как сейчас - через RDP.
Может ли это быть достигнуто.
РЕДАКТИРОВАТЬ
Постарался прояснить, какова задача, а также цель, которую нужно достичь.
РЕДАКТИРОВАТЬ 2
Предоставлено решение для iisreset
вызов; обновил вопрос, чтобы определить экземпляры через Интернет, если это возможно.
3 ответа
Ну, я до сих пор не знаю, почему Microsoft Azure решает установить World Wide Web Publishing Service
запустить режим Manual
, но я нашел способ изменить это.
На вторую часть исходного вопроса я все еще надеюсь получить ответ, но до тех пор, пожалуйста, найдите свое решение для первой части, чтобы исправить (IMO) iisreset
проблема с задачей запуска:
В ваш файл startup.cmd (или как вы его назвали), который я поместил в папку автозагрузки в корне моего приложения, включите эту строку текста:
powershell -ExecutionPolicy Unrestricted. \ startup \ w3svc.ps1
В этой же папке создайте файл PowerShell с именем w3svc.ps1 со следующим содержимым:
Set-ItemProperty -Path HKLM: \ SYSTEM \ CurrentControlSet \ Services \ W3SVC -Name Start -Value 2
Вуаля; ваш IIS теперь работает как положено - World Wide Web Publishing Service
теперь установлен в режим запуска Automatically
,
Примечание: для того, чтобы вышеприведенное сработало, вам нужно установить для свойства osFamily значение 2 в файле ServiceConfiguration.cscfg.
Вы можете обработать событие RoleEnvironment.Changing в WebRole.cs и установить для свойства Cancel объекта аргументов события значение true. Затем вам просто нужно внести изменения в параметры конфигурации, и Azure перезапустит все ваши экземпляры упорядоченным образом.
Я не знаю почему iisreset
не работает Что касается вашего второго вопроса, вы можете использовать API управления сервисами для перезагрузки или перезаписи экземпляра. Это может делать то, что вы хотите. Вы также можете, конечно, написать свой собственный код, чтобы делать все, что вы хотите. (У вас может быть код в вашей веб-роли, который опрашивает блоб с именем <instance ID>.txt
и делает iisreset
каждый раз, когда капля меняется.)