KSOAP никогда не истекает - PullRequest
3 голосов
/ 30 марта 2011

Я использую ksoap2 2.5.4 (на Android 2.2), который поддерживает тайм-аут. Я использую Apache 2.2.16 для обработки своих запросов. Все работает нормально, но когда я выключаю свой Apache (или отключаю удаленный компьютер, на котором работает Apache), вызов никогда не прерывается. Я использую отдельный поток для вызова моего WS, и этот поток перестает работать / отвечать / останавливается в течение примерно 2 минут в этом случае.

int MSG_TIMEOUT = 15000;
HttpTransportSE httpTransport;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
httpTransport = new HttpTransportSE(URL, MSG_TIMEOUT);
httpTransport.debug = true;
httpTransport.call(SOAP_ACTION, envelope);//thread stops responding here

Я даже пытался использовать таймер для отмены этого потока после заданного времени ожидания, но это не сработало. Тема еще там и ждет 2 минуты.

TimerTask task;
Timer mTimer;
task = new TimerTask() {
  public void run() {               
    mThread.interrupt();
   }
 };
mTimer = new Timer();
mTimer.schedule(task, MSG_TIMEOUT);

Я также получаю это предупреждение, которое может иметь к этому отношение (я не знаю, что с ним делать):

Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(org.ksoap2.transport.KeepAliveHttpsTransportSE$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

Есть ли шанс заставить KSOAP работать или улучшить таймер для прерывания этого потока после заданного времени ожидания? Спасибо за ответ или любую идею, что попробовать!

Ответы [ 4 ]

6 голосов
/ 30 августа 2011

Используйте API-интерфейс ksoap2 версии 2.5.2 или выше.

Вы можете скачать это, нажав здесь

И используйте следующий код при создании объекта HTTPTransport.

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 */
public HttpTransportSE(String url) {
    super(url);
}

/**
 * Creates instance of HttpTransportSE with set url
 *
 * @param url
 *            the destination to POST SOAP data
 * @param timeout
 *            timeout for connection and Read Timeouts (milliseconds)
 */
public HttpTransportSE(String url, int timeout) {
    super(url, timeout);
}
0 голосов
/ 01 июля 2011

У меня та же проблема при запуске ksoap2-android-assembly-2.5.6-jar-with-зависимости. Я бы предположил, что значение тайм-аута ksoap, отображаемое в HttpTransportSE, будет эквивалентно тому, что вы можете выполнить с помощью org.apache.http.client.HttpClient с параметрами времени ожидания соединения и сокета:

HttpClient client = new DefaultHttpClient (); HttpParams params = client.getParams (); HttpConnectionParams.setConnectionTimeout (params, CONNECTION_TIMEOUT); HttpConnectionParams.setSoTimeout (params, SOCKET_TIMEOUT);

Наконец-то я получаю SocketException «истекло время ожидания операции» через ~ 3 минуты, независимо от того, какое значение я указал в параметре timout в HttpTransportSE. Мой сервер работает, он просто не отвечает на запрос.

0 голосов
/ 01 июля 2011

Это все еще остается открытой проблемой, так как HttpTransportSE игнорирует значение тайм-аута в некоторых ситуациях.См. Связанные:

http://code.google.com/p/ksoap2-android/issues/detail?id=52

http://code.google.com/p/ksoap2-android/issues/detail?id=60&q=httpTransportse%20timeout

0 голосов
/ 15 апреля 2011

Вы скачали исходный код и затем скомпилировали его?Или вы использовали готовый файл JAR?Проверю это сегодня вечером или рано утром.

...