开发者

KSOAP never timeout

开发者 https://www.devze.com 2023-02-21 10:52 出处:网络
I\'m using ksoap2 2.5.4 (on Android 2.2) which supports timeout. I\'m using Apache 2.2.16 to handl开发者_开发技巧e my requests. Everything works fine, but when I shutdown my Apache (or disconnect remo

I'm using ksoap2 2.5.4 (on Android 2.2) which supports timeout. I'm using Apache 2.2.16 to handl开发者_开发技巧e my requests. Everything works fine, but when I shutdown my Apache (or disconnect remote PC on which Apache is running) the call never times out. I'm using separate thread to call my WS and this thread stop working/responding/stalls for about 2 minutes in this case.

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

I even tried to use Timer to cancel that thread after predefined timeout, but it didn't work. Thread is still there and is waiting for 2 minutes.

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

I also get this warning that may have something to do with it (I don't know what to do with it):

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.

Is there any chance to make KSOAP working or to improve the timer to interrupt that thread after predefined timeout? Thank you for answer or any idea what to try!


Use ksoap2 API version 2.5.2 or greater.

You can download that by clicking here

And use the following code while making object of 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);
}


Have you downloaded the source and then compiled it? Or did you use a finished JAR file? Will test this tonight or early in the morning tomorrow.


I'm having the same problem running ksoap2-android-assembly-2.5.6-jar-with-dependencies. I would have assumed the ksoap timeout value that appears on HttpTransportSE would be equivalent to what you can accomplish using org.apache.http.client.HttpClient with connection timeout and socket timeout pamameters:

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

I finally get a SocketException "the operation timed out" after ~3 minutes no matter what value I put in the timout parameter on HttpTransportSE. My server is running, its just not responding to the request.


This still seems to be an open issue with HttpTransportSE ignoring the timeout value in some situations. See related:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号