2013-05-27 7 views
9

मैं RoleEnviroment कक्षा या कुछ ऐसा ही उपयोग कर सी # कोड से क्लाउड सेवा के लिए तैनाती का नाम प्राप्त करने का एक तरीका ढूंढ रहा हूं ताकि अगर मेरी सेवा myservice.cloudapp.net पर तैनात की गई है तो मुझे myservice मिल जाएगा।मैं Azure क्लाउड सेवा के लिए कोड से सेवा का नाम कैसे प्राप्त कर सकता हूं?

मैं यह कैसे कर सकता हूं?

उत्तर

3

क्लाउड सेवा नाम प्राप्त करने के लिए आपको Service Management REST API का उपयोग करने की आवश्यकता होगी। ऑपरेशन थोड़ा उलझन में है!

Here're चरणों आपको बस इतना करना होगा:

  1. तैनाती आईडी प्राप्त करें। यह आप RoleEnvironment से प्राप्त करने में सक्षम हो जाएगा।
  2. अगला आप अपनी सदस्यता में सभी क्लाउड सेवाओं की सूची प्राप्त करते हैं। इसके लिए आपको List Hosted Services ऑपरेशन करने की आवश्यकता होगी।
  3. फिर प्रत्येक क्लाउड सेवा के लिए, आपको गुण प्राप्त करने होंगे। इसके लिए आपको Get Hosted Service Properties प्रदर्शन करने की आवश्यकता होगी। यह भी सुनिश्चित करें कि आप embed-detail=true क्वेरी स्ट्रिंग पैरामीटर प्रदान करते हैं।
  4. आपको प्राप्त होने वाली प्रतिक्रिया में, आपको PrivateID विशेषता मिलनी होगी और इसे अपनी तैनाती आईडी से मेल खाना होगा।

मैंने लंबे समय से एक ब्लॉग पोस्ट लिखा था जिसमें कुछ कोड है जो आपको ऐसा कुछ करने देता है: http://gauravmantri.com/2012/03/16/programmatically-finding-deployment-slot-from-code-running-in-windows-azure/

+0

मतलब मैं के साथ एक प्रमाण पत्र अपलोड करना सिर्फ नाम पाने के लिए तैनाती? मैं इस पर एक नज़र डालूँगा। –

+0

@ s093294: हां, और आपको उस कोड को लिखना होगा जो उस प्रमाण पत्र को लोड करता है और आरईएसटी अनुरोध करता है। यह अतिरिक्त कोड की कई दर्जन लाइनों की तरह है। मैं मानता हूं कि यह एक ओवरकिल है। 'सेवा नाम' के लिए – sharptooth

5

गौरव आंशिक रूप से सही है। आपको सेवा प्रबंधन API का उपयोग करना होगा। अपनी शब्दावली से सावधान रहें - परिनियोजन नाम आम तौर पर सेवा कोड की वर्तमान तैनाती का प्रतिनिधित्व करने वाला एक GUID है। आप सर्विस नाम की तलाश में हैं। सेवा प्रबंधन API का उपयोग करके, आप Get Hosted Service Properties पर एक अनुरोध जारी कर सकते हैं। प्रतिक्रिया ऑब्जेक्ट में प्रॉपर्टी सर्विसनाम वह DNS उपसर्ग है जिसे आप ढूंढ रहे हैं:

क्लाउड सेवा का नाम। क्लाउड सेवा तक पहुंचने के लिए यह नाम DNS उपसर्ग नाम और का उपयोग किया जा सकता है। उदाहरण के लिए, यदि बादल सेवा का नाम MyService है आपको कॉल करके बादल सेवा का उपयोग कर सकते हैं: http://MyService.cloudapp.net

+0

+1। मुझे इस बारे में नहीं पता था। धन्यवाद। –

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; 
    } 

आप subcriptionId और प्रमाणपत्र थंबप्रिंट निर्दिष्ट करने की आवश्यकता

संबंधित मुद्दे