我如何可靠性檢測我的Azure應用程序是否在開發結構中運行,而不是在「雲」中運行?如何檢測Azure應用程序是否在開發結構中運行?
RoleEnvironment.IsAvailable對於兩者都是true。我只想要在一種情況下是真的。
我在問這個,因爲我希望我的庫的用戶能夠在開發結構中免費使用我的庫。因此,在配置文件中手動添加單獨的標識符或標誌並保留兩個用於開發和部署的配置是不可行的。
我如何可靠性檢測我的Azure應用程序是否在開發結構中運行,而不是在「雲」中運行?如何檢測Azure應用程序是否在開發結構中運行?
RoleEnvironment.IsAvailable對於兩者都是true。我只想要在一種情況下是真的。
我在問這個,因爲我希望我的庫的用戶能夠在開發結構中免費使用我的庫。因此,在配置文件中手動添加單獨的標識符或標誌並保留兩個用於開發和部署的配置是不可行的。
一個選項是看看RoleEnvironment.DeploymentId
- 如果你在開發結構中運行,它應該有一個名稱,如'deployment(n)',其中n是某個連續的數字。如果您正在生產中運行,則部署ID應該類似於Guid。
你可以做的另一件事是看角色的實例名稱。在生產中,它應該以_0
(代表實例0)結束。在開發結構中,它將結束於.0
編輯1/8/2013 - 意識到這個答案我在2年前給了很過時!現在也有 - 查看詳情here。
例如:
發展結構不完全模擬Windows Azure的負載均衡器的行爲。例如,如果在Web角色實例中運行的代碼從RoleEnvironment.StatusCheck事件處理程序中調用SetBusy方法以指示角色實例應該從負載平衡器的旋轉中移出,您仍然可以從您的角色中訪問角色瀏覽器,而其狀態是RoleInstanceStatus.Busy。
天藍色織物通常在one of the few fixed OS Images下運行。所以你也可以調查System.Environment。對於某些僅在蔚藍結構中出現的模式(即與Windows Azure OS匹配的特定操作系統版本或類似的東西)。
有一個非常簡單的技術,我一直在使用 - 並發現自己經常使用它。訣竅是在您的開發機器上設置一個環境變量,並使用基本的DOS批處理文件(或PowerShell)技術,跳過不想要的東西,如果該變量存在。這個環境變量不會出現在雲中。
我的博客上講述在這裏:Azure FAQ: Can I create a Startup Task that executes only when really in the Cloud?
在Windows Azure SDK 1.5引入了RoleEnvironment.IsEmulated靜態布爾屬性從代碼來確定角色實例是否在Windows Azure計算模擬器中運行。 這些信息也可以傳遞給啓動任務。有關史蒂夫馬克思here的一篇很棒的文章。
儘管它僅基於環境變量,但對於想要跳過基於此檢查的許可的人員應該很容易設置此變量,因此IsEmulated將返回true 。 – 2011-10-04 06:59:45
+1用於更新您的答案 – Tom 2013-01-11 19:31:03