2012-03-29 58 views
0

我在Qt應用程序中爲Symbian S60 3rd Edition FP2使用gsoap。我每5秒向WS提出一些請求。 2小時後,應用程序停止連接到WS,並從gsoap中得到此錯誤28:SOAP_TCP_ERROR。如果我停止應用程序並重新啓動它,它可以再次連接到WS。這是爲什麼發生?Gsoap錯誤28:SOAP_TCP_ERROR

我已經把gsoap WS調用放在for循環中,並且每次運行它時都會在第892次停止連接到WS。

回答

1

你可以做幾件事情作爲一個prework:

  • 在gSOAP的啓用DBGLOG在客戶端
  • 使用soap_faultdetail。

我99%確定它會給你一個tcp連接超時錯誤,這意味着連接握手失敗。 如果是這樣,這意味着WS由於某種原因未接受連接。問題的根源可能在代理/防火牆/操作系統/ buggy ws/driver之間,只是其中的一小部分。因此,可以使用重新連接嘗試。我不熟悉與Symbian,但在Windows操作系統重新連接在幕後進行的:

默認情況下,重新連接嘗試兩次,但這種行爲可能是因爲存在改變通過註冊表參數,驅動程序或winsock。

我認爲你必須在應用程序級別編寫顯式的connection-retry子例程並強制gSOAP使用它(請參閱gSOAP文檔中的鉤子部分),或者如果它返回錯誤,只需調用soap_connect幾次即可。

注意:在gsoap級別引入connection_timeout可能會引起混淆。 如果你決定在你的代碼中放置這個(如果你還沒有這個的話),那麼在這個超時或者超時之內,重新連接嘗試是否真的被執行了一些測試。 我只是想說,你的應用程序可能會將超時設置爲30分鐘,但是你的操作系統會把SYN數據包放入WS主機,只需幾次就可以讓我們說幾秒鐘。如果WS主機由於某種原因不會響應SYN-ACK,您的gsoap的tcp_connect子例程將陷入30分鐘的浪費時間循環。

相關問題