Thrift をセットアップして、2 つのエンティティと対応するサービスを構築しました。C# 用のコードを生成し、サーバー用の小さなコンソール アプリケーションと、テスト クライアント用の別のコンソール アプリケーションを作成しました。私はローカルマシンで両方を実行しましたが、それは魅力的に機能しました。しかし、Windows Server 2012 を実行している Azure VM にサーバーをデプロイし、エンドポイントを TCP のポート 9090 に作成すると、クライアントが接続できません。タイムアウトがあります。
SO に関する同様の質問:これは php ライブラリ固有の問題に関するもので、これは 2 台の 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 -出力は次のとおりです。
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
しかも再送2回。
注: Wireshark に表示される宛先 IP は、canyouseeme.org が決定した IP とは異なります。
また、注意: 私のテスト クライアントと canyouseeme.org からの両方の接続試行が Wireshark に表示されます。
サーバー コンソール アプリケーションで何か問題が発生していますか? 私のローカルマシンでは問題なく動作します。