如何从Azure创建的虚拟机中确定外部端点?

时间:2014-02-15 04:09:42

标签: .net azure virtual-machine endpoints azure-role-environment

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

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

  

RoleEnvironment类可以在一个独立组件中使用   Azure角色之外的Azure VM。这些组件可以是程序   例如,可以通过远程处理角色实例来运行   从命令行启动组件。这些过程必须是   以提升的权限运行以访问RoleEnvironment类。

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

因此,最终的问题是:Azure VM中运行的独立应用程序如何确定该VM的公共端点?

1 个答案:

答案 0 :(得分:0)

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