Как предотвратить страшное время ожидания подключения KSOAP2 в Android

Я пытался предотвратить истечение времени ожидания вызова KSOAP2 при запросе данных из моей веб-службы Axis2 через Android, но не смог этого сделать.

Общие сведения о веб-службе.

Моя веб-служба работает на сервере Apache Tomcat и используется для возврата информации для станций в реальном времени. Когда я пытаюсь через браузер, он работает так, как ожидалось, и на веб-сайте он также работает так, как ожидалось.

Проблема

Однако, когда я пытаюсь использовать тот же метод в своем приложении для Android, иногда я получаю следующую ошибку отслеживания стека. В других случаях запрос будет успешным. Время от времени запрос истечет немедленно, а в других случаях он будет ждать около минуты, прежде чем истечет время ожидания.

Устройства

Я пробовал это через Samsung Galaxy SII (платформа 2.3.3) и на Samsung Galaxy SI (платформа 2.2.2) с использованием Wi-Fi и 3G с теми же результатами. Однако он никогда не отключается при использовании через эмулятор (платформа 2.2).

Мой код

String NAMESPACE = "http://service.domain.ie";
String URL = "http://www.myhost.com/axis2/services/RealTime?wsdl";
String METHOD_NAME = "getStationData";
String SOAP_ACTION = "RealTime";

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("stationType", getStationType());
request.addProperty("stationApiCode", getApiCode());

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);

HttpTransportSE androidHttpTransport;

SoapObject response = null;

try {
        androidHttpTransport = new HttpTransportSE(URL,60000); // Tried Setting the Timeout to 1 Minute
        androidHttpTransport.debug = true;
        androidHttpTransport.call(SOAP_ACTION,envelope);
        response = (SoapObject)envelope.bodyIn;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    }

Ошибка трассировки стека

04-13 13:07:18.015: W/System.err(9249): java.net.SocketTimeoutException
04-13 13:07:18.015: W/System.err(9249):     at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:461)
04-13 13:07:18.015: W/System.err(9249):     at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85)
04-13 13:07:18.015: W/System.err(9249):     at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:65)
04-13 13:07:18.015: W/System.err(9249):     at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:140)
04-13 13:07:18.015: W/System.err(9249):     at java.io.BufferedInputStream.read(BufferedInputStream.java:225)
04-13 13:07:18.020: W/System.err(9249):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readLine(HttpURLConnectionImpl.java:660)
04-13 13:07:18.020: W/System.err(9249):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readResponseHeaders(HttpURLConnectionImpl.java:690)
04-13 13:07:18.020: W/System.err(9249):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1040)
04-13 13:07:18.020: W/System.err(9249):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:512)
04-13 13:07:18.020: W/System.err(9249):     at org.ksoap2.transport.ServiceConnectionSE.openInputStream(ServiceConnectionSE.java:113)
04-13 13:07:18.020: W/System.err(9249):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:160)
04-13 13:07:18.050: W/System.err(9249):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
04-13 13:07:18.050: W/System.err(9249):     at ie.smartcommuter.models.Station.getRealTimeData(Station.java:123)
04-13 13:07:18.050: W/System.err(9249):     at ie.smartcommuter.controllers.tabcontents.StationRealtimeActivity$1.run(StationRealtimeActivity.java:95)
04-13 13:07:18.050: W/System.err(9249):     at java.lang.Thread.run(Thread.java:1019)

Я обновил KSOAP2 с 2.4 до 2.5.7 и попытался установить лимит времени ожидания, но пока безуспешно. Итак, чтобы перейти к моему вопросу:

У кого-нибудь еще была эта проблема, и если да, то как они ее решили?


person Shane Doyle    schedule 13.04.2012    source источник
comment
Нужно попробовать Timeout с TIMEOUT=20000; в new HttpTransportSE(URL,60000);   -  person Herry    schedule 13.04.2012


Ответы (1)


когда истечет время ожидания, он вызовет исключение SocketTimeoutException.

вы должны поймать его в попытке поймать и обработать тайм-аут, как вам нравится

person user2261183    schedule 09.04.2013