代码之家  ›  专栏  ›  技术社区  ›  Redwood

如何使用ksoap 2在WebService调用上强制超时?

  •  2
  • Redwood  · 技术社区  · 15 年前

    我需要向使用ksoap 2连接到Web服务的J2ME应用程序添加超时。

    我尝试过将该方法描述为 http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransport.html 但在这个设备上似乎不起作用。

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

    系统超时似乎在设备模式之间有所不同,对于我来说太长了。

    有人对可能有用的东西有什么想法吗?

    3 回复  |  直到 13 年前
        1
  •  2
  •   Redwood    15 年前

    我最终使用了具有setMotimeout()方法的socket类。

        2
  •  2
  •   Andreas Mattisson    14 年前

    可以提到,我对ksoap2 v2.5.2进行了修改,以支持httptransportse类的超时。当超时发生时,它将抛出socketTimeoutException。

    它的jar和src都在这个URL中找到 http://www.lightsoft.se/?p=707

        3
  •  1
  •   ZZ Coder    15 年前

    请记住,您处理的不是全功能计算机。在某些设备上,您不能中断网络操作,尤其是TCP连接。

    这就是我们要做的,

    1. 在建立连接之前,在一个较短的频率(比如2秒)上创建另一个监视计时器线程。
    2. 在监控线程中,如果没有达到时间限制,您可以向设备发送一些消息,假装正在取得进展。
    3. 如果达到某个时间限制,请尝试通过发送thread.interrupt()来中断另一个线程。此呼叫在MIDP中可用。
    4. 在连接线程上,如果被中断就退出。

    这在所有模拟器上都很好,但是连接线程直到5分钟后在某些手机上才会得到异常。