0

我有一个服务器应用程序(一个侦听 TCP 端口的 .NET 控制台应用程序),我需要在 Azure VM 而不是 Worker 或 Web 角色中运行,我需要该应用程序能够确定其自己的公共/互联网端点 IP 和端口(例如,在通过管理门户创建 VM 时创建/分配的)。应用程序侦听的内部 TCP 端口在所有 VM 上都是相同的,但每个 VM 实例的外部/互联网端口显然是唯一的(我没有使用 Azure 负载均衡器)。

我尝试修改我的 .NET 控制台应用程序以尝试使用 确定主机虚拟机的公共 IP 地址和端口RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[i].IPEndpoint,但RoleEnvironment.CurrentRoleInstance抛出异常(“角色发现数据不可用”)并且RoleEnvironment.IsAvailable始终为false. 文档说这应该是可能的:

RoleEnvironment 类可用于 Azure 角色之外的 Azure VM 中的独立组件。这些组件可以是可以通过例如远程进入角色实例并从命令行启动组件来运行的程序。这些进程必须以提升的权限运行才能访问 RoleEnvironment 类。

我正在通过远程桌面到 VM 运行我的控制台应用程序,然后右键单击我的 .exe 并选择以管理员身份运行,但仍然RoleEnvironment.IsAvailablefalse. 我是否需要以某种方式将 Windows Azure 集成组件安装到 VM 上?在线上的所有链接都谈到了在准备托管在 Azure 中的 Hyper-V 虚拟机时在 Hyper-V 中执行此操作;但在这种情况下,我从一开始就直接在 Azure 中创建 VM,方法是使用管理门户并选择默认的 Windows Server 2012 R2 Datacenter 映像。我不知道在这种情况下如何安装它们,或者它是否仍然受支持(大多数关于 Windows Azure 集成组件的链接来自 2011 年)。

所以最终的问题是:在 Azure VM 中运行的独立应用程序如何确定该 VM 的公共终结点?

4

1 回答 1

0

请参阅此答案中使用的 PowerShell 命令:https ://stackoverflow.com/a/18194296/2899711 - 如果您查看它正在执行哪些 API 调用,您可能能够制作正确的调用。PowerShell Cmdlet 是开源的,因此您可以查看它们为 Cmdlet 使用的 API 调用。

于 2014-02-15T13:11:23.850 回答