Gsoap错误28:SOAP_TCP_ERROR

时间:2012-03-29 09:16:59

标签: c++ qt symbian gsoap

我在Qt应用程序中使用gsoap for Symbian S60 3rd Edition FP2。我每隔5秒向WS发出几次请求。 2小时后,应用程序停止能够连接到WS,我从gsoap得到错误28:SOAP_TCP_ERROR。如果我停止应用程序并再次启动它,它就能再次连接到WS。为什么会这样?

我已经将gsoap WS调用放在for循环中,并且每次运行它时都会在第892次停止连接到WS。

1 个答案:

答案 0 :(得分:1)

你可以做几件事作为预备工作:

  • 在gsoap
  • 启用DBGLOG
  • 在客户端使用soap_faultdetail。

我99%确定它会给你一个tcp连接超时错误,这意味着连接握手刚刚失败。 如果是这样,则意味着WS由于某种原因未接受连接。问题的根源可能介于proxy / firewall / os / buggy ws / driver之间,仅举几例。因此,可以使用重新连接尝试。我不熟悉symbian,但在Windows操作系统中重新连接是在幕后执行的:

默认情况下,重新连接尝试进行两次,但可以通过注册表参数,驱动程序或winsock更改此行为。

我认为您必须在应用程序级别编写显式连接重试子例程并强制gSOAP使用它(请参阅gSOAP文档中的钩子部分)或者如果它返回错误,只需调用soap_connect几次。

注意:在gsoap级别引入connection_timeout可能会造成混淆。 如果您决定在您的代码中放置这个(如果您还没有这个),请执行一些测试,重新连接尝试是否真的在此超时内执行。 我只想说你的应用程序可以将超时设置为30分钟,但是你的操作系统会将SYN数据包放入WS主机中,只需几次,比如几秒钟。如果由于某种原因,WS主机不会响应SYN-ACK,那么gsoap的tcp_connect子例程将落入30分钟的浪费时间循环。

相关问题