2011-05-28 8 views
11

एमवीसी 3 का उपयोग करना और मैं यह निर्धारित करना चाहता हूं कि क्या मैं स्थानीय रूप से चल रहा हूं या क्लाउड पर तैनात हूं?मैं कैसे निर्धारित कर सकता हूं कि मैं अपने पीसी पर या क्लाउड पर स्थानीय रूप से चल रहा हूं या नहीं?

उत्तर

14

यह है कि मैं क्या

public static class Azure 
{ 
    private static bool m_IsRunningAzure = GetIsRunningInAzure(); 

    private static bool GetIsRunningInAzure() 
    { 
     Guid guidId; 
     if (RoleEnvironment.IsAvailable && Guid.TryParse(RoleEnvironment.DeploymentId, out guidId)) 
      return true; 
     return false;  
    } 

    public static bool IsRunningInAzure() 
    { 
     return m_IsRunningAzure; 
    } 

    private static bool m_IsRunningAzureOrDevFabric = GetIsRunningInAzureOrDevFabric(); 

    private static bool GetIsRunningInAzureOrDevFabric() 
    { 
     return RoleEnvironment.IsAvailable; 
    } 

    public static bool IsRunningInAzureOrDevFabric() 
    { 
     return m_IsRunningAzureOrDevFabric; 
    } 
} 
+0

यदि आपने मेरे ब्लॉग पोस्ट को देखा है, जैसा कि मेरे उत्तर में संदर्भित है, तो आप यह सटीक तकनीक दिखाएंगे और समझाएंगे। –

22

RoleEnvironment.IsAvailable आपको बताता है कि क्या आप विंडोज़ एज़ूर में चल रहे हैं, लेकिन यह वास्तविक विंडोज़ एज़ूर और स्थानीय विकास सिम्युलेटर के बीच अंतर नहीं करता है।

मैंने blog post लिखा है जो यह पता लगाने के लिए एक चाल दिखाता है कि आप वास्तविक बनाम नकली विंडोज़ एज़ूर में चल रहे हैं या नहीं, जब RoleEnvironment.IsAvailable == true - उम्मीद है कि जो आप ढूंढ रहे हैं उसे प्रदान करता है।

संपादित करें: मामले में आप नीचे-एन-गंदा कोड मैं उपरोक्त पोस्ट में वर्णन करना चाहते हैं, यही कारण है कि तकनीक काम करता है के किसी भी विवरण के बिना:

private bool IsRunningInDevFabric() 

    { 
     // easiest check: try translate deployment ID into guid 
     Guid guidId; 
     if (Guid.TryParse(RoleEnvironment.DeploymentId, out guidId)) 
      return false; // valid guid? We're in Azure Fabric 
     return true;  // can't parse into guid? We're in Dev Fabric 
    } 

संपादित 2: मेरा जवाब एक सा है रगड़ा हुआ। अब है, जो उपयोग करने के लिए बहुत अधिक सरल है। एमएसडीएन दस्तावेज here

+0

शायद फिर से शब्द इस पुराने हैक अधिक RoleEnvironment.IsEmulated के लिए और अधिक प्रमुखता देने के लिए उपयोग क्यों करें? – Simon

+1

शायद यह ध्यान दिया जाना चाहिए कि 'IsAvailable' की अभी भी जांच की जानी चाहिए, क्योंकि' IsEmulated' फेंक देगा यदि पूर्व गलत है (भूमिका पर्यावरण प्रारंभ नहीं हुआ है)। –

2

आप पर्यावरण परिवर्तनीय के अस्तित्व की तलाश करके इसे पुराने तरीके से कर सकते हैं।

कंप्यूटर गुणों में अपने पर्यावरण चर के मान को सेट करें और इसे पर्यावरण.GetEnvironmentVariable ("MyVariable") का उपयोग करके पढ़ें।

Azure पर, चर मौजूद नहीं होगा, इसलिए कॉल शून्य हो जाएगी।

2

वहाँ कुछ सुझाव यहाँ हैं - http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8fd96850-7a04-401b-89d5-ba153c1b4c51

  1. पर्यावरण चर
  2. deploymentID
  3. कंप्यूटर का नाम
  4. विंडोज Azure संग्रहण सेवा समाप्ति बिंदु

उन्हें को देखते हुए, मैं मुझे लगता है कि AZURE_DRIVE_DEV_PATH पर्यावरण परिवर्तक को देखने के लिए प्रेरित किया जा सकता है - लेकिन वहां एन है ओ गारंटी है कि यह भविष्य में एसडीके संस्करणों में काम करेगा।

+0

मैंने उस एमएसडीएन धागा को नहीं देखा था - इसे पोस्ट करने के लिए धन्यवाद। देवता पर्यावरण बनाम उत्पादन में चलते समय मूल्यवान मूल्यों की तुलना सबसे मूल्यवान है। विकल्प 4 शायद बहुत व्यावहारिक नहीं है, क्योंकि आप देव पर्यावरण से देव भंडारण या वास्तविक भंडारण तक पहुंच सकते हैं। मैं विकल्प 2 का उपयोग करता हूं, लेकिन जैसा कि आपने पर्यावरण चर का निरीक्षण करने के लिए भावी एसडीके संस्करणों के साथ अस्वीकरण के बारे में नोट किया है, यह भी तैनाती आईडी का निरीक्षण करने पर लागू होता है। –

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

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