2014-02-24 4 views
6

Ich muss programmgesteuert die aktuelle Region finden (z. B. "West US" oder "East US"), wo meine aktuelle Rolle ausgeführt wird. Gibt es eine API, um das zu finden?Wie programmatisch kennen Sie die aktuelle Region in einer azurblauen Rolle?

+0

Müssen Sie es von der Rolle oder von draußen finden? –

+0

Gaurav, sagst du, dass du es ohne die Management API aus der Rolle selbst finden kannst :)? –

+0

@pksorensen Sie müssten immer noch die Management-API verwenden, aber da müssten Sie auf den Boden gehen. Wenn der Code in der Rolle ausgeführt wird, verfügen Sie über eine Implementierungs-ID. Sie würden dann alle Cloud-Dienste durchlaufen, um die entsprechende Bereitstellungs-ID zu finden, und dann die Eigenschaften des Cloud-Dienstes abrufen, wie Sie in Ihrer Antwort unten erwähnt haben. –

Antwort

2

Sie können diese Informationen nur erhalten, wenn Sie die Management API verwenden.

Entweder von REST oder Sie können die C# Windows Azure-Verwaltungsbibliotheken (Prerelease on nuget) verwenden.

Beachten Sie jedoch, dass Sie Verwaltungszertifikate einrichten müssen, um die Informationen zu erhalten.

Eine einfachere Alternative besteht darin, eine Einstellung in Ihrem Cloud-Dienst zu erstellen und die Werte beim Erstellen der Bereitstellungskonfiguration festzulegen. Ich tue dies und habe Bereitstellungskonfigurationen für die Regionen, die ich anvisiere.

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 
    } 

Hier ... ist die Anmeldeinformationen, entweder ein Management-Zertifikat oder Ihre WAAD oauth Token. (ADAL: Active Directory-Authentifizierungsbibliothek) kann für Tokens verwendet werden.

hier ist der Code für die Anmeldeinformationen von einem Zertifikat erhalten:

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

Es wäre viel hilfreicher, den tatsächlichen API-Aufruf zu veranschaulichen, der diese Funktionalität bereitstellt (dasselbe gilt für die C# -Methode). –

+0

Es hängt davon ab, welche Route genommen wird. Ich kann den C# -Code für C# Management-Bibliotheken in ein paar Stunden geben. –

2

Betrachten Get Cloud Service in dem Service-Management-API. Wenn Sie den Service bereitstellen, zu dem Ihre Rollen gehören, können Sie eine ähnliche Antwort wie die folgende abrufen. Beachten Sie das Standortfeld, das ich markiert habe.

<?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

Hinzufügen zu @ GregD's Antwort: Bitte beachten Sie, dass das Standortfeld nicht zurückgegeben wird, wenn Ihr Cloud-Service Teil einer Affinitätsgruppe ist. In diesem Fall müssen Sie die Eigenschaften einer Affinitätsgruppe abrufen und den Speicherort dieser Affinitätsgruppe ermitteln. Das wäre auch der Standort des Cloud-Dienstes. –

+0

http://msdn.microsoft.com/en-us/library/windowsazure/ee460789.aspx << Eigenschaften der Affinitätsgruppe api. –

+0

Dies sind die gleichen Informationen, die Sie von den C# -Managment-Bibliotheken erhalten. Bei der Implementierung haben wir alle unsere Affinitätsgruppen mit -weu -wus -sea für Westeuropa verbunden und es ist dann leicht zu erkennen, wo sich Affinitätsgruppen befinden. Nochmal. Es ist einfach, die Metadaten in die Deployment-Datei als eine Einstellung zu setzen und spart viel Zeit, um die Informationen von Management API zu bekommen. –

Verwandte Themen