2012-03-29 57 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分钟的浪费时间循环。

相关问题