我想解释一下问题是什么,以及为什么添加上面的代码可以解决这个问题,让其他人受益。
在您的工作角色中,您可以配置任何 TCP 端点以及任何端口号。当此 VM 启动时,VM 被配置为使用此端口,并且防火墙包含一个例外以提供对此端口的访问。当您准备好启动 Azure VM 时,您已经拥有 TCP/IP 地址并启用了配置的端口。
现在,当您的角色开始时,如果您有任何服务或应用程序需要访问此端口,您真的需要
例如,如果我在我的工作角色中配置了 Tomcat/Java,我必须在我配置的端口上创建一个 TCP 侦听器。这可以在我的工人角色开始时完成,如下所示:
- 获取当前角色实例的IP地址和端口号
- 创建一个 TCP 侦听器并在此 IP 地址和端口上启动
- 在我的辅助角色 OnStart() 函数中添加代码以执行步骤 1) 和 2)。
代码如下所示:
TcpListener TomcatPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TomcatWeb80"].IPEndpoint);
TomcatPortListener.Start();
在您的情况下,您所做的完全相同,您从中获得了 IP 地址和端口号,然后使用 IP/端口从套接字地址创建了一个端点:
RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TCPin"];
IPEndPoint localEndPoint = new IPEndPoint(externalEndPoint.IPEndpoint.Address, externalEndPoint.IPEndpoint.Port);
localEndPoint.Create();
对于创建 TCP 端点的任何 Web 或工作角色来说,这是必须设置的。