Программный перезапуск виртуальной машины Azure вызывает ошибку 404

Я пытаюсь перезагрузить / перезапустить виртуальную машину Azure через интерфейс REST < / а>.

Я создал виртуальную машину через портал Azure, и она отображается как работающая на вкладке «Виртуальные машины» слева.

URL-адрес, который я использую для этой операции, выглядит следующим образом:

https://management.core.windows.net/ {my-subscription-guid} / services / hostedservices / cloudvm-test / deployments / cloudvm-test / roles / cloudvm-test / Operations

Вы можете увидеть «cloudvm-test», повторяющееся как имя размещенной службы, имя развертывания и имя роли, потому что именно так оно отображается в XML, который вы получаете после вызова Получить свойства размещенной службы. Несмотря на то, что виртуальная машина не является классической размещенной службой, она отображается в этом xml, поэтому я просто использую значения, которые я там нахожу. Одна из проблем, которые меня беспокоят, заключается в том, правильно ли я создаю URL-адрес.

В любом случае, используя указанный выше URL-адрес, я создаю свой запрос, как ожидалось, и отправляю POST текст:

<RestartRoleOperation xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<OperationType>RestartRoleOperation</OperationType></RestartRoleOperation>

Я получаю сообщение об ошибке 404, в котором говорится, что «Имя службы ресурса hostedservices не поддерживается».

Не то чтобы это действительно важно, но я пишу на Objective C. Если у вас есть пример на C #, я могу с ним справиться.


person ChrisW    schedule 24.10.2012    source источник


Ответы (1)


Вместо .../roles/roleName/... вы должны использовать .../roleInstances/roleName .... (замените роли на roleInstances в пути Uri).

Документация по виртуальной машине полна таких мелких ошибок.

Кстати, для того, чтобы иметь виртуальную машину, вам нужна «размещенная служба». Поэтому, если вы попробуете REST API для создания виртуальной машины, вы обнаружите, что вам нужно указать существующую размещенную службу. Поэтому сначала нужно создать размещенную службу, а затем развернуть на ней виртуальную машину. Это немного сбивает с толку, потому что портал скрывает от нас эту маленькую деталь. Но если вы перейдете на старый портал, вы увидите, что на самом деле за каждой созданной вами виртуальной виртуальной машиной стоит размещенная служба. Эта размещенная служба не отображается на новом портале как «Облачная служба», пока вы не удалите все виртуальные машины в ней ...

person astaykov    schedule 24.10.2012
comment
Спасибо за ответ. Кажется, это помогает, хотя я получаю ответ HTTP 202 (Принято) вместо задокументированного HTTP 201 (Создано). Думаю, я спишу это на другую ошибку в документе. - person ChrisW; 25.10.2012
comment
Недавно я немного поработал с ВМ (работал над fluent-management) и, честно говоря, не думаю Я видел 201. Все ответы были приняты. Даже для CreateVirtualMachineDeployment! Кроме того, это также похоже на некоторую несогласованность в документации - ResartRoleOperation не может (семантически) вернуть Created. Вернуть Accepted действительно семантически правильно. - person astaykov; 25.10.2012