如何使用kso​​ap2强制执行Web服务调用的超时?

时间:2009-09-24 19:53:02

标签: java java-me timeout ksoap2

我需要为使用kso​​ap 2连接到Web服务的J2ME应用程序添加超时。

我在http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransport.html尝试了描述为可能的伪超时的方法,但它似乎无法在此设备上运行。

我会在另一个线程上运行连接并在计时器触发时终止它但是在每个http://developers.sun.com/mobility/midp/articles/threading2/完成J2ME执行之前无法杀死一个线程(这是一个嵌入式设备,所以我可以'只是在后台留下无限数量的线程阻塞)。我不能使用poll作为布尔方法,因为它是单次尝试打开阻塞的连接。

系统超时似乎因设备模态而异,对我来说太长了。

有没有人对可能有效的事情有任何想法?

3 个答案:

答案 0 :(得分:2)

我最终使用了具有setSoTimeout()方法的Socket类。

答案 1 :(得分:2)

可以提一下,我对KSoap2 v2.5.2进行了修改,以支持HttpTransportSE类的超时。超时发生时会抛出SocketTimeoutException。

在此网址http://www.lightsoft.se/?p=707

中找到了jar和src

答案 2 :(得分:1)

请记住,您没有使用功能齐全的计算机。在某些设备上,您无法中断网络操作,尤其是TCP连接。

这就是我们的工作,

  1. 在建立连接之前,请以较短的频率(比如2秒)创建另一个监控计时器线程。
  2. 在监控线程中,如果未达到时间限制,您可以假设您正在取得进展,可以向设备发送一些消息。
  3. 如果达到某个时间限制,请尝试通过发送Thread.interrupt()来中断其他线程。此调用可在MIDP中使用。
  4. 在连接线程上,如果被中断则退出。
  5. 这适用于所有模拟器,但连接线程在5分钟后才能在某些手机上获得异常。