2014-02-24 49 views
6

我需要以編程方式查找當前角色正在運行的當前區域(例如「West US」或「East US」)。有沒有任何API可以找到它?如何以編程方式知道天藍色角色中的當前區域?

+0

您是否需要從角色內部或外部找到它? –

+0

Gaurav,你是說你可以在沒有管理API的情況下找到它嗎? –

+0

@pksorensen你仍然需要使用管理API,但是你必須從底部開始。如果代碼在角色中運行,那麼您將擁有部署ID。然後,您可以遍歷所有云服務,找到匹配的部署ID,然後像下面的答案中提到的那樣獲取雲服務的屬性。 –

回答

2

如果您使用Management Api,則只能獲取該信息。

通過REST或者您可以使用c#Windows Azure管理庫(在nuget上預售)。

但是由於您需要設置管理證書來獲取信息,因此需要注意。

更簡單的選擇是在您的雲服務中創建設置並在創建部署配置時設置值。我這樣做,併爲我定位的區域進行部署配置。

using(var azure = CloudContext.Clients.CreateComputeManagementClient(...)) 
    { 
     var service = await azure.HostedServices.GetDetailedAsync("servicename"); 
     // service.Properties.Location 
     // service.Properties.AffinityGroup; 

    } 
    using(var azure = CloudContext.Clients.CreateManagementClient(...)) 
    { 
     var affinityGroup = await azure.AffinityGroups.GetAsync("name",new CancellationToken()); 
     // affinityGroup.Location 
    } 

在這裏...是證書,無論是管理證書還是您的WAAD oauth標記。 (ADAL:Active Directory認證庫)可用於令牌。

這裏是從證書獲取證書代碼:

public static CertificateCloudCredentials GetCertificateCloudCredentials(
     string certificateThumbprint, string subscriptionId) 
    { 
     var certificate = CertificateHelper.LoadCertificate(
      StoreName.My, 
      StoreLocation.LocalMachine, 
      certificateThumbprint); 

     if (certificate == null) 
      throw new Exception(
       string.Format("Certificate with thumbprint '{0}' not found", 
       certificateThumbprint)); 

     var cred = new CertificateCloudCredentials(
      subscriptionId, 
      certificate 
     ); 
     return cred; 
    } 
+0

說明提供此功能的實際API調用(與C#方法相同)會更有幫助。 –

+0

這取決於採取什麼路線。我可以在幾個小時內爲c#管理庫提供c#代碼。 –

2

考慮在服務管理API使用Get Cloud Service。當您提供角色所屬的服務時,您可以檢索類似於以下內容的回覆。請注意我已加星標的位置字段。

<?xml version="1.0" encoding="utf-8"?> 
<HostedService xmlns="http://schemas.microsoft.com/windowsazure"> 
    <Url>hosted-service-url</Url> 
    <ServiceName>hosted-service-name</ServiceName> 
    <HostedServiceProperties> 
    <Description>description</Description> 
    <AffinityGroup>name-of-affinity-group</AffinityGroup> 
    **<Location>location-of-service</Location >** 
    <Label>base-64-encoded-name-of-service</Label> 
    <Status>current-status-of-service</Status> 
    <DateCreated>creation-date-of-service</DateCreated> 
    <DateLastModified>last-modification-date-of-service</DateLastModified> 
    <ExtendedProperties> 
     <ExtendedProperty> 
     <Name>name-of-property</Name> 
     <Value>value-of-property</Value> 
     </ExtendedProperty> 
    </ExtendedProperties> 
    <GuestAgentType>type-of-guest-agent</GuestAgentType> 
    </HostedServiceProperties> 
    <DefaultWinRmCertificateThumbprint>thumbprint-of-winrm-certificate</DefaultWinRmCertificateThumbprint> 
</HostedService> 
+0

添加到@ GregD的答案:請注意,如果您的雲服務是親和力組的一部分,則不會返回位置字段。在這種情況下,您需要獲取關聯組的屬性並獲取該關聯組的位置。這也將是雲服務的位置。 –

+0

http://msdn.microsoft.com/en-us/library/windowsazure/ee460789.aspx << Get Affinity Group Properties api。 –

+0

這是從C#Managmement庫中獲得的相同信息。在部署中,我們將所有親和力組添加到西歐的-weu -wus -sea,然後輕鬆知道親和組位於何處。再次。將元數據作爲設置放入部署文件非常簡單,並且節省了大量時間,不得不從管理api獲取信息。 –

相關問題