2

我有一些運行相同配置的虛擬機。在這些虛擬機上,我安裝了我的應用程序。如何爲每個Windows Azure虛擬機操作系統設置一些唯一標識符

我想在我的虛擬機中設置一些自定義唯一標識符,以便我知道如果特定(來自我的應用程序)請求來自請求來自哪個VM(或該應用程序正在哪個VM中運行)。由於同一應用程序在所有虛擬機內運行,因此爲了區分每個請求,我想在創建虛擬機時設置一些唯一的自定義標識符。

我想在創建虛擬機時設置一些系統屬性/環境變量。

我使用Windows Azure Rest API和Java在Windows Azure Portal上創建和管理虛擬機。我想通過使用Java編程語言來實現這一點。

請讓我知道你是否有相同的信息。

回答

0

您可以使用遠程桌面服務連接到您的虛擬機,因此應該輕鬆地連接設置並將其添加到應用程序的web.config文件中,該文件標識部署,或者如果您希望web.config文件爲相同,那麼你可以上傳一個小文本文件。

或者,您的服務器必須具有唯一的名稱。我假設你正在運行.Net應用程序?如果是這樣,那麼你應該可以使用Server.MachineNamehttp://msdn.microsoft.com/en-us/library/system.web.httpserverutility.machinename%28v=vs.71%29.aspx)來獲取你的代碼運行的框的唯一名稱。

+0

感謝您的回覆。我正在運行一個Java應用程序。我計劃是否可以爲每個虛擬機設置每個虛擬機獨特的環境變量,然後運行在該虛擬機上的任何應用程序都可以訪問該虛擬機併發送每個請求。但是如何在VM操作系統中設置env變量。 – PSS

+0

不客氣,雖然我覺得我做得不太好!您可能想要重新解釋您的問題 - 添加Java,並且需要Path vars可以讓別人更容易回答,並且向標記中添加Java可以從開發人員的角度獲得幫助。我想大多數人會認爲Azure的問題是關於.NET的,除非你明確地標記它。祝你好運,並歡迎Stack Overflow。 – JcFx

+0

感謝您提出寶貴的建議。我相應地更新了問題。 – PSS

2

每個實例應具有不同的SID,因爲計算機是使用通用選項進行系統準備的(當您想要提供自定義圖像時也是如此)。您可以在 this question使用的代碼獲得SID,並用其作爲標識符:

 string domainName; 
     Helper.SID_NAME_USE accountType; 
     SecurityIdentifier machineSID = 
       Helper.LookupAccountName("", Environment.MachineName, out domainName, out accountType); 

注:儘管它說則domainName的代碼,你的機器並不需要在域這個工作。

要在虛擬機上設置「自定義標識符」,您可以使用環境變量。由於您使用的是Java,所以最簡單的方法就是使用setx.exe命令行工具(download。你可以這樣調用該工具:

setx.exe VmIdentifier 123 -m 

那麼你應該可以使用閱讀它系統:

System.getenv("VmIdentifier") 

這不是真的明白我,如果你使用虛擬機(IaaS的)或雲服務(PaaS)。如果您使用的是虛擬機,則部署該應用程序將由您決定,同時您也可以執行setx.exe

現在,如果您使用雲服務,您實際上傳了一個在您的實例上部署的包。並且您可以獲得對啓動任務(在應用程序啓動之前運行)的支持:How to Define Startup Tasks for a Role。您可以使用啓動任務來運行setx.exe,但請確保您將executionContext設置爲提升來運行它。

+0

感謝您的回覆,我想設置自己的唯一標識符,然後在該VM內運行的應用程序中檢索它。 – PSS

+0

對不起,我誤解了這個問題。更新我的答案。 –

+0

非常感謝您的回答。我想在Azure雲環境中部署該虛擬機並編程時設置標識符。因此,只要在此之後啓動該機器,我就設置了該環境變量。 – PSS

相關問題