我设置 Thrift 来构建两个实体和一个相应的服务。我为 C# 生成了代码,为服务器创建了一个小型控制台应用程序,为测试客户端创建了另一个。我在我的本地机器上运行了两个,它就像一个魅力。但是,当在运行 Windows Server 2012 的 Azure VM 上部署服务器时,在端口 9090 上为 TCP 创建了一个端点,我的客户端无法连接。有超时。
关于 SO 的类似问题:这个是关于 php 库特定问题的,这个是关于两台 linux 机器的。后一个问题接近我的问题,但我可以想象我的问题是 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 中。
我的服务器控制台应用程序做错了吗?它在我的本地机器上运行良好。