com.microsoft.windowsazure.exception.ServiceException: ResourceNotFound: 在当前部署的服务中找不到角色 WorkerRole1_IN_0

com.microsoft.windowsazure.exception.ServiceException: ResourceNotFound: Role WorkerRole1_IN_0 was not found in the currently deployed service

我在 Azure 门户中部署了云服务。部署成功。我制作了一些 azure java sdk 代码,如下所示,

ComputeManagementClient cmclient = ComputeManagementService.create(config); 

 VirtualMachineOperations vmoperat = cmclient.getVirtualMachinesOperations(); 
 VirtualMachineGetResponse vmresp = vmoperat.get("AzurecloudDNS", AzurecloudDNSStaging20160613193121","WorkerRole1_IN_0");

但是抛出如下异常,

Exception in thread "main" com.microsoft.windowsazure.exception.ServiceException: ResourceNotFound: Role WorkerRole1_IN_0 was not found in the currently deployed service.
 at com.microsoft.windowsazure.exception.ServiceException.createFromXml(ServiceException.java:206)
 at com.microsoft.windowsazure.management.compute.VirtualMachineOperationsImpl.get(VirtualMachineOperationsImpl.java:6517)
 at com.aaa.azure.JavaClient.main(JavaClient.java:81)

在 Azure 门户中,我可以看到 WorkerRole1_IN_0 正在使用此云服务。但它抛出异常。

有什么想法吗?先谢谢了。

解释Azure经典门户和Azure新门户的区别,它们使用不同的模型创建云服务和虚拟机。

在Azure经典门户上,使用ASM模式(Azure服务管理)创建Azure服务。但是使用 ARM 模式(Azure 资源管理)用于 Azure 新门户。

例如,您可以参考不同模式的REST API了解现有云服务获取信息的区别,请看下文。

  1. 在 ASM 模式下使用 Get Role 经典 REST API,它涉及 Java 包 com.microsoft.windowsazure.management.compute
  2. 在ARM模式下使用Get information about a virtual machine REST API,它涉及Java包com.microsoft.azure.management.compute

所以根据你的代码,你使用Service Management SDK来获取在经典门户上创建的云服务的信息,而不是在新门户上创建的云服务的信息,因为在不同模式下创建的云服务有不同的模型结构。