2013-10-26 66 views
0

我成立了Thrift來構建兩個實體和相應的服務。我爲C#生成了代碼,爲服務器創建了一個小型控制檯應用程序,爲測試客戶端創建了另一個控制檯應用程序。我跑在我的本地機器上,它像一個魅力。但是,在運行Windows Server 2012的Azure VM上部署服務器時,如果在端口9090上爲TCP創建端點,則我的客戶端無法連接。有一個超時。Apache Thrift遠程服務超時

SO上的相似問題:This one is about a php library specific problemthis one is about two linux machines。後者接近我的問題,但我可以想象我的問題是Windows或Azure虛擬機特定的問題。

我使用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 

輸出從客戶端(遠程登錄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中。

我的服務器控制檯應用程序是否做錯了什麼?它在我的本地機器上正常工作。

+0

當有人報告問題時使用得最多的句子:「*是的,但它在我的本地機器上工作正常!*」。我希望,我每次聽到它都會得到一美元。 =>§1您的開發環境極不可能匹配所需的產品環境。你將擁有更少的權利,更少的權限,可能會有更少的事情被允許執行,因爲環境可能被鎖定和/或更好的防火牆。唯一的建議是找出連接被阻塞的原因。我認爲canyouseeme可能是對的。 – JensG

+0

那麼,當然環境不同,但這不是重點(我沒有聲稱其他任何東西)。當我(和其他人)指出某些東西在本地機器上有效時,那麼這對於願意幫助的人來說不僅僅是有用而且必要的信息,因此他們知道哪些是有效的,哪些不會,並且縮小問題的可能來源。不是嗎?或者它只是困擾你的黑體部分? - >改變它。 – phlow

回答

1

因爲netstat的報道,您的服務器監聽9090,因爲tcpdump的報告說,SYN包抵達9090,一定是別的東西會阻止客戶端。我的懷疑在這種情況下可能是某種本地防火牆(因爲數據包確實到達了,但操作系統應該用SYN數據包應答,但你沒有看到)。檢查Windows防火牆以確保端口9090處於打開狀態。

+0

謝謝安德魯,就是這樣!我將已編譯的MyThriftService.exe添加到Windows防火牆中允許的應用程序,現在就可以使用。這些設置可以在這裏找到:控制面板\系統和安全\ Windows防火牆\允許的應用程序,然後「允許另一個應用程序」 - >「瀏覽」 - >「添加」。我被Azure「端點」所迷惑 - 我認爲它可以處理所有事情,因爲它可以與MS SQL,遠程桌面和Visual Studio Web Deploy端口一起工作。 – phlow