2

我有一些使用相同配置运行的虚拟机。在这些虚拟机上,我安装了我的应用程序。

我想在我的 VM 中设置一些自定义唯一标识符,以便我知道如果特定(来自我的应用程序)请求来自该请求来自哪个 VM(或者该应用程序在哪个 VM 中运行)。由于相同的应用程序在所有 VM 中运行,因此为了区分每个请求,我想在创建虚拟机时设置一些唯一的自定义标识符。

我想在创建虚拟机时设置一些系统属性/环境变量。

我正在使用 Windows Azure Rest API 和 Java 在 Windows Azure 门户上创建和管理虚拟机。我想通过使用 Java 编程语言来实现这一点。

如果您有相同的信息,请告诉我。

4

2 回答 2

2

每个实例都应该有一个不同的 SID,因为机器是使用 generalize 选项进行系统准备的(当您想要提供自定义映像时同样适用)。您可以使用此问题中的代码获取 SID ,并将其用作标识符:

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

注意:即使它在代码中显示 domainName,您的机器也不需要在域中才能正常工作。

要在 VM 上设置“自定义标识符”,您可以使用环境变量。由于您使用的是 Java,因此设置这些的最简单方法可能是setx.exe命令行工具(下载)。您可以像这样调用该工具:

setx.exe VmIdentifier 123 -m

然后你应该能够使用系统阅读它:

System.getenv("VmIdentifier")

我不清楚您使用的是虚拟机 (IaaS) 还是云服务 (PaaS)。如果您使用的是虚拟机,则由您自行部署应用程序,在此过程中,您还可以执行setx.exe

现在,如果您使用云服务,您实际上上传了一个部署在您的实例上的包。您还可以获得对启动任务(在应用程序启动之前运行)的支持:How to Define Startup Tasks for a Role。您可以使用启动任务来运行 setx.exe,但请确保在 executionContext 设置为提升的情况下运行它。

于 2012-09-18T06:37:58.743 回答
0

您可以使用远程桌面服务连接到您的虚拟机,因此连接并将设置添加到应用程序的 web.config 文件以标识部署应该很简单,或者,如果您希望您的 web.config 文件相同,那么您可以上传一个小文本文件。

或者,您的服务器必须已经有一个唯一的名称。我假设您正在运行 .Net 应用程序?如果是这样,那么您应该能够使用Server.MachineNamehttp://msdn.microsoft.com/en-us/library/system.web.httpserverutility.machinename%28v=vs.71%29.aspx)来获取的唯一名称你的代码正在运行的盒子。

于 2012-09-18T06:30:43.003 回答