TCP连接到Azure失败

时间:2012-05-18 01:37:06

标签: c# .net tcp azure

我最近将一个Azure应用程序部署到了应该在端口2993中接受TCP数据包的登台环境。当在Azure模拟器中运行时,它做得非常好,并且完全按预期执行。

但是,现在它已经在Azure的登台服务器上,每当我尝试连接到TCP端口时,我都会收到以下SocketException:

  

连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败。

我的网络应用程序有两个实例,一个是辅助角色(在端点中配置了2993个)和一个Web角色(仅用于端口80)。顺便说一下,80端口功能完美。 Web应用程序是使用C#中的Visual Studio创建的。为什么会发生这种情况?我该如何解决?

非常感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

问题似乎与程序检测到服务器的IP地址有关。通过使用以下服务器代码,我设法解决了问题:

RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TCPin"];
        IPEndPoint localEndPoint = new IPEndPoint(externalEndPoint.IPEndpoint.Address, externalEndPoint.IPEndpoint.Port);

然后可以将IPEndpoint与tcpListener套接字一起使用。

答案 1 :(得分:0)

我想解释一下这个问题是什么以及为什么添加上面的代码可以解决这个问题,为其他人带来好处。

在您的辅助角色中,您可以配置任何TCP端点以及任何端口号。当此VM启动时,将配置VM以使用此端口,并且防火墙包含一个例外以提供对此端口的访问。当您准备好启动Azure VM时,已经有TCP / IP地址并且已启用配置的端口。

现在,当您的角色启动时,如果您需要任何服务或应用程序访问此端口,您真的需要

例如,如果我在我的辅助角色中配置了Tomcat / Java,则必须在配置的端口上创建TCP侦听器。这可以在我的工作人员角色如下所示时完成:

  1. 获取当前角色实例的IP地址和端口号
  2. 创建TCP侦听器并启动此IP地址和端口
  3. 在我的辅助角色OnStart()函数中添加代码以执行步骤1)和2)。
  4. 代码如下所示:

    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或辅助角色的必需设置。