2009-09-24 14 views
2

我需要爲使用kso​​ap 2連接到Web服務的J2ME應用程序添加超時。如何在使用kso​​ap 2的web服務調用上強制執行超時?

我已經嘗試過描述爲http://ksoap2.sourceforge.net/doc/api/org/ksoap2/transport/HttpTransport.html可能的僞超時的方法,但它似乎無法在此設備上運行。

我會在另一個線程上運行連接,如果計時器觸發但在J2ME中按照http://developers.sun.com/mobility/midp/articles/threading2/(這是一個嵌入式設備,因此我不能僅僅離開它)無限數量的線程在後臺阻塞)。我不能使用輪詢的布爾方法,因爲它是單次嘗試打開阻塞的連接。

系統超時時間似乎因設備模式而異,而且對我而言太長。

有沒有人有任何想法可能工作?

+0

問題被標記爲J2ME發現,但你沒有訪問MIDP API?你在複印機中使用了一個實際的CDC堆棧嗎?什麼型號? – 2009-09-28 17:58:22

回答

2

我結束了使用具有setSoTimeout()方法的Socket類。

+0

可否請你解釋一下,你是怎麼使用它的? – UMAR 2010-10-14 04:30:07

+0

我被困在這個問題,仍然無法解決它。 – UMAR 2010-10-14 04:35:34

+0

可以請在這裏發佈適當的答案?或想法? – UMAR 2010-11-16 09:47:00

1

請記住,您沒有處理全功能電腦。在某些設備上,您不能中斷網絡操作,特別是TCP連接。

這是我們做什麼,

  1. 之前進行連接,創建一個短的頻率(比如2秒),另一個監視計時器線程。
  2. 在監控線程中,如果沒有達到時間限制,您可以向設備發送一些消息,假裝您正在進步。
  3. 如果達到一定的時間限制,嘗試通過發送Thread.interrupt()來中斷另一個線程。此調用在MIDP中可用。
  4. 在連接線程上,如果被中斷就退出。

這適用於所有模擬器,但連接線程在5分鐘後纔會在某些電話上得到異常。

+0

不幸的是,這不是一個手機,而是一個複印機,它不使用MIDP,因此沒有Thread.interrupt()。 – 2009-09-24 21:10:53

2

請注意,我對KSoap2 v2.5.2進行了修改,以支持HttpTransportSE類的超時。它會在發生超時時拋出SocketTimeoutException。

這兩個罐子和src在這個網址http://www.lightsoft.se/?p=707

相關問題