【问题标题】:Programmatically restarting Azure virtual machine generates 404 error以编程方式重新启动 Azure 虚拟机生成 404 错误
【发布时间】:2012-10-25 03:34:27
【问题描述】:

我正在尝试通过REST interface 重新启动/重新启动 Azure 虚拟机。

我通过 Azure 门户创建了一个虚拟机,它在左侧的“虚拟机”选项卡下显示为正在运行。

我用于此操作的网址如下:

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

您可以看到“cloudvm-test”作为托管服务名称、部署名称和角色名称重复出现,因为这就是它在您调用 Get Hosted Service Properties 后返回的 xml 中的显示方式。尽管虚拟机不是经典的托管服务,但它出现在这个 xml 中,所以我只使用在那里找到的值。我担心的问题之一是我是否正确构建了 URL。

无论如何,使用上面的 URL,我按预期构建我的请求,并发布一个正文:

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

我收到的错误是 404,指出“不支持资源服务名称托管服务”。

这并不重要,但我是用 Objective C 编写的。如果你有 C# 中的示例,我可以很好地处理它。

【问题讨论】:

    标签: azure


    【解决方案1】:

    您必须使用 .../roleInstances/roleName .... 代替 .../roles/roleName/...(在 Uri 路径中将 roles 替换为 roleInstances)。

    VM 相关的文档中充满了这样的小错误。

    顺便说一句,为了拥有虚拟机,您需要拥有“托管服务”。因此,如果您尝试使用 REST API 创建 VM,您会发现必须指定现有的托管服务。因此,您首先必须创建托管服务,然后将虚拟机部署到该服务。这有点令人困惑,因为门户网站向我们隐藏了那个小细节。但是,如果您转到旧门户,您会看到您创建的每个虚拟 VM 背后实际上都有一个托管服务。在您删除其中的所有虚拟机之前,该托管服务不会在新门户中显示为“云服务”...

    【讨论】:

    • 感谢您的回答。这似乎可以解决问题,尽管我得到的是 HTTP 202 响应(已接受)而不是记录在案的 HTTP 201(已创建)。我想我会把它归结为另一个文档错误。
    • 我最近做了一些 VM 工作(在 fluent-management 上工作),坦率地说,我认为我没有见过 201。所有的答案都是 202 接受的。即使是 CreateVirtualMachineDeployment!另外,这似乎也是文档中的一些不一致 - ResartRoleOperation 不能(语义上)返回“创建”。返回“已接受”在语义上确实是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多