我有一个服务器应用程序(一个侦听TCP端口的.NET控制台应用程序),我需要在Azure VM而不是工作者或Web角色中运行,我需要该应用程序才能确定自己的应用程序公共/ Internet端点IP和端口(例如,通过管理门户创建VM时创建/分配的端口)。应用程序侦听的内部TCP端口在所有VM上都是相同的,但外部/ Internet端口显然对于每个VM实例都是唯一的(我没有使用Azure负载均衡器)。
我尝试修改我的.NET控制台应用程序,尝试使用RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[i].IPEndpoint
确定主机虚拟机面向公众的IP地址和端口,但RoleEnvironment.CurrentRoleInstance
会抛出异常(“角色发现数据不可用“)和RoleEnvironment.IsAvailable
始终为false
。 documentation说这应该是可能的:
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的公共端点?
答案 0 :(得分:0)
请参阅此答案中使用的PowerShell命令:https://stackoverflow.com/a/18194296/2899711 - 如果您查看正在进行的API调用,则可能能够制定正确的呼叫。 PowerShell Cmdlet是开源的,因此您可以查看它们用于Cmdlet的API调用。