2013-05-27 18 views

Odpowiedz

3

Aby uzyskać nazwę usługi w chmurze, należy użyć numeru Service Management REST API. Operacja jest nieco zawikłana!

Here're kroki trzeba by zrobić:

  1. Uzyskaj identyfikator wdrażania. To będzie można uzyskać z RoleEnvironment.
  2. Następnie pobrać listę wszystkich usług w chmurze w subskrypcji. W tym celu należy wykonać operację List Hosted Services.
  3. Następnie dla każdej usługi w chmurze należy uzyskać właściwości. W tym celu musisz wykonać Get Hosted Service Properties. Upewnij się również, że podałeś parametr ciągu zapytania o wartości embed-detail=true.
  4. W otrzymanej odpowiedzi musisz znaleźć atrybut PrivateID i dopasować go do identyfikatora wdrożenia.

Napisałem długi wpis z bloga, który zawiera kod umożliwiający wykonanie następujących czynności: http://gauravmantri.com/2012/03/16/programmatically-finding-deployment-slot-from-code-running-in-windows-azure/.

+0

oznacza, że ​​muszę przesłać certyfikat wraz rozmieszczenie tylko po to, aby uzyskać nazwę? Przyjrzę się temu. –

+0

@ s093294: Tak, i będziesz musiał napisać kod, który ładuje ten certyfikat i wysyła żądania REST. To trochę więcej niż kilkadziesiąt linii kodu. Zgadzam się, że to przesada. – sharptooth

5

Gaurav jest częściowo poprawny. Będziesz musiał użyć interfejsu Service Management API. Uważaj na swoją terminologię - Nazwa wdrożenia jest zwykle identyfikatorem GUID reprezentującym bieżące wdrożenie kodu usługi. Szukasz ServiceName. Korzystając z interfejsu API do zarządzania usługami, możesz wysłać żądanie pod numer Get Hosted Service Properties. Właściwość ServiceName w obiekcie odpowiedzi to prefiks DNS, którego szukasz:

Nazwa usługi w chmurze. Ta nazwa jest nazwą prefiksu DNS, a do dostępu do usługi w chmurze można użyć numeru . Na przykład, jeśli nazwa usługi cloud jest MyService można uzyskać dostęp do usługi cloud pod numerem: http://MyService.cloudapp.net

+0

+1 dla 'ServiceName'. Nie wiedziałem o tym. Dzięki. –

0
async public Task<List<XDocument>> GetAzureServices() 
    { 
     String uri = String.Format("https://management.core.windows.net /{0}/services/hostedservices ", _subscriptionid); 
     List<XDocument> services = new List<XDocument>(); 

     HttpClient http = GetHttpClient(); 

     Stream responseStream = await http.GetStreamAsync(uri); 

     if (responseStream != null) 
     { 
      XDocument xml = XDocument.Load(responseStream); 
      var svcs = xml.Root.Descendants(ns + "HostedService"); 
      foreach (XElement r in svcs) 
      { 
       XDocument vm = new XDocument(r); 
       services.Add(vm); 
      } 
     } 

     return services; 
    } 

public HttpClient GetHttpClient() 
    { 
     WebRequestHandler handler = new WebRequestHandler(); 
     string CertThumbprint = _certthumbprint; 
     X509Certificate2 managementCert = FindX509Certificate(CertThumbprint); 
     if (managementCert != null) 
     { 
      handler.ClientCertificates.Add(managementCert); 
      HttpClient httpClient = new HttpClient(handler); 
      httpClient.DefaultRequestHeaders.Add("x-ms-version", "2012-03-01"); 
      httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 
      return httpClient; 
     } 
     return null; 
    } 
private static X509Certificate2 FindX509Certificate(string thumbprint) 
    { 
     X509Store certificateStore = null; 
     X509Certificate2 certificate = null; 

     try 
     { 
      certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
      certificateStore.Open(OpenFlags.ReadOnly); 

      var certificates = certificateStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false); 
      if (certificates.Count > 0) 
      { 
       certificate = certificates[0]; 
      } 
     } 
     finally 
     { 
      if (certificateStore != null) certificateStore.Close(); 
     } 

     return certificate; 
    } 

trzeba określić subcriptionId i odciskiem certyfikatu

Powiązane problemy