我们正在尝试使用Azure公开的REST API通过Java中的HTTPClient创建虚拟机。我们使用以下请求URL和XML,但我们收到“错误请求”响应。
https://management.core.windows.net/ {subscription-id} / services / hostedservices / {现有的主机服务名称} /部署
<Deployment xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>TestVMAnandP</Name>
<Label>bXl2bQ==</Label>
<RoleList>
<Role>
<RoleName>TestVMAnandP</RoleName>
<RoleType>PersistentVMRole</RoleType>
<ConfigurationSets>
<ConfigurationSet>
<ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType>
<HostName>TestVMAnandP</HostName>
<UserName>root</UserName>
<UserPassword>test</UserPassword>
</ConfigurationSet>
</ConfigurationSets>
<DataVirtualHardDisks>
<DataVirtualHardDisk>
<Lun>10</Lun>
<LogicalDiskSizeInGB>50</LogicalDiskSizeInGB>
</DataVirtualHardDisk>
</DataVirtualHardDisks>
<OSVirtualHardDisk>
<SourceImageName>srini2-srini2-2012-08-23.vhd</SourceImageName>
<MediaLink>http://sriniteststore.blob.core.windows.net/vhds/srini2-srini2-2012-08-23.vhd</MediaLink>
</OSVirtualHardDisk>
<RoleSize>ExtraSmall</RoleSize>
</Role>
</RoleList>
<VirtualNetworkName>MyNetwork</VirtualNetworkName>
</Deployment>
如果我们尝试在URL中提供与vm名称相同的服务名称,则会收到404错误。我们已尝试在网络中给出的大多数样本替换了值,但是所有内容都给出了400错误。如果我们得到一些帮助,那就太棒了。
错误:
我得到两种不同的错误:
Error 1 : When i use new <service-name> inside the below URL .management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deployments/ ------------------------------------------------------------------- Response message--->Not Found---404
java.io.FileNotFoundException: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/anand/deployments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
Caused by: java.io.FileNotFoundException: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/anand/deployments
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
Error 2 : when i use an existing available <service-name> in the below URL management.core.windows.net/<subscription-id>/services/hostedservices/<service-name>/deployments/
Response message--->Bad Request---400
java.io.IOException: Server returned HTTP response code: 400 for URL: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/azurecogservice/deployments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: management.core.windows.net/84cc18f5-5bdd-4c95-9d69-862c12c53507/services/hostedservices/azurecogservice/deployments
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
--------------------- VALID XML ------------------------ -------------------------------------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Deployment xmlns="http://schemas.microsoft.com/windowsazure">
<Name>190bed4a</Name>
<DeploymentSlot>Production</DeploymentSlot>
<Label>190bed4a</Label>
<RoleList>
<Role>
<RoleName>SuseOpenVm_rolec8fc</RoleName>
<RoleType>PersistentVMRole</RoleType>
<ConfigurationSets>
<ConfigurationSet>
<ConfigurationSetType>LinuxProvisioningConfiguration
</ConfigurationSetType>
<HostName>SuseOpenVm_rolec8fc</HostName>
<UserName>anandsrinivasan</UserName>
<UserPassword>Cloud360</UserPassword>
<DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
</ConfigurationSet>
<ConfigurationSet>
<ConfigurationSetType>NetworkConfiguration</ConfigurationSetType>
<DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
<InputEndpoints>
<InputEndpoint>
<LocalPort>22</LocalPort>
<Name>SSH</Name>
<Port>22</Port>
<Protocol>TCP</Protocol>
</InputEndpoint>
</InputEndpoints>
</ConfigurationSet>
</ConfigurationSets>
<OSVirtualHardDisk>
<MediaLink>https://portalvhdsvf842yxvkhbg4.blob.core.windows.net/vhds/190bed4a.vhd</MediaLink>
<SourceImageName>SUSE__openSUSE-12-1-20120603-en-us-30GB.vhd</SourceImageName>
</OSVirtualHardDisk>
<RoleSize>Small</RoleSize>
</Role>
</RoleList>
<VirtualNetworkName>anand360NW</VirtualNetworkName>
</Deployment>
答案 0 :(得分:2)
每当我遇到REST API问题时,我首先尝试通过门户网站完成我想要做的事情。在您的情况下,我尝试使用用户名root和密码测试创建Linux VM(TestVMAnandP)。我立即注意到以下错误:
答案 1 :(得分:1)
我一直在做同样的事情。
我建议你查看我在Cloudify GitHub仓库中使用这个API的java REST客户端的实现:
另一个很好的参考是我的微软提供的node.js sdk。您可以浏览代码并查看出错的地方:
希望有所帮助
答案 2 :(得分:0)
错误代码400 / 4xx意味着请求有问题。并且错误代码404明确地说“服务器没有找到与给定URI匹配的任何内容”。那么您可以验证OSVertualHardDisck中提供的信息是否正确。
<OSVirtualHardDisk>
<SourceImageName>srini2-srini2-2012-08-23.vhd</SourceImageName>
<MediaLink>http://sriniteststore.blob.core.windows.net/vhds/srini2-srini2-2012-08-23.vhd</MediaLink>
</OSVirtualHardDisk>
<强>更新强>
您正在尝试使用的服务 http://msdn.microsoft.com/en-us/library/windowsazure/jj157194.aspx
您可以在此处查看错误代码说明 http://msdn.microsoft.com/en-us/library/windowsazure/ee460801.aspx
您使用的目标网址可能只是服务器无效或预期的。
答案 3 :(得分:0)
服务管理API文档严重搞砸了。如果你是受害者,我不会感到惊讶。你可以尝试的一件事是改变
<LogicalDiskSizeInGB>50</LogicalDiskSizeInGB>
要素
<LogicalSizeInGB>50</LogicalSizeInGB>
在您的DataVirtualHardDisk元素下。
我建议这样做的原因是因为如果你查看获取数据磁盘的文档(http://msdn.microsoft.com/en-us/library/windowsazure/jj157180.aspx),它会提到你将 LogicalDiskSizeInGB 作为响应元素之一,但是当您执行此函数时,您获得的元素是 LogicalSizeInGB 。
再一次,这是一种预感。试一试。
<强>更新强>
您可能想要做的另一件事是解析您获得的更多详细信息。在.Net中,我们得到了一个WebException(很抱歉,很长一段时间没用Java),所以我通常会读取该异常的响应,并返回一个更详细的XML。
答案 4 :(得分:0)
Anand,此API存在问题。我在fluent management中实现了这一点,遗憾的是XML依赖于顺序。
如果不精确,您可以循环使用400到500个HTTP异常。我将使用powershell
以详细模式编写VM创建,并让您的应用程序按照您看到的确切顺序使用XML,它应该没问题。
在接下来的几天里,我将在http://blog.elastacloud.com上发布一个java服务管理客户端示例,该示例使用.publishsettings
文件来发出可能对您有帮助的请求。