Apache Thrift远程服务超时

时间:2013-10-26 19:39:29

标签: c# azure thrift windows-server-2012

我设置Thrift来构建两个实体和一个相应的服务。我为C#编写了代码,为服务器创建了一个小型控制台应用程序,为测试客户端创建了另一个应用程序。我在我的本地机器上运行它,它就像一个魅力。但是,当在运行Windows Server 2012的Azure VM上部署服务器时,在端口9090上为TCP创建端点,我的客户端无法连接。暂停了。

关于SO的类似问题:This one is about a php library specific problemthis one is about two linux machines。后者接近我的问题,但我可以想象我的问题是Windows或Azure VM特定的。

我正在使用NuGet的Thrift 0.9.0.0。我尝试过SimpleServer和ThreadPoolServer。这就是我在服务器上所做的事情:

Thrift.Server.TServer server = new Thrift.Server.TThreadPoolServer(new TodoThriftService.Processor(new TodoThriftServiceHandler()), new TServerSocket(9090));

这就是我在客户端上所做的事情:

TodoThriftService.Client client = new TodoThriftService.Client(new TBinaryProtocol(new TSocket("my.host.com", 9090)));

我也尝试过服务器IP地址而不是主机名,但它也没有用。

netstat -an输出是:

TCP    0.0.0.0:9090           0.0.0.0:0              LISTENING

来自客户端的telnet输出(telnet my.host.com 9090):

Verbindungsaufbau zu my.host.com...Es konnte keine Verbindung mit dem Host hergestellt werden, auf Port 9090: Verbindungsfehler

“连接错误”是德语。

当我访问服务器上的http://canyouseeme.org/并检查端口9090时,输出为:

Error: I could not see your service on 123.34.567.890 on port (9090). Reason: Connection timed out

当我在服务器上使用Wireshark嗅探数据包时,输出为:

1   0.000000000 12.3.456.78 12.34.567.89    TCP 66  53566 > websm [SYN] Seq=0 Win=8192 Len=0 MSS=1452 WS=256 SACK_PERM=1

两次转发。

注意:Wireshark中显示的目标IP与canyouseeme.org确定的IP不同。

另请注意:我的测试客户端和canyouseeme.org的连接尝试都显示在Wireshark中。

我的服务器控制台应用程序出错吗?它在我的本地机器上运行良好。

1 个答案:

答案 0 :(得分:1)

因为netstat报告您的服务器 正在侦听9090,并且因为tcpdump报告SYN数据包 到达9090,所以其他东西必须阻止客户端。

在这种情况下,我怀疑是某种本地防火墙(因为数据包已经到达,但操作系统应该已经回复了一个SYN数据包,你没有看到它)。检查Windows防火墙以确保端口9090已打开。