KSOAP ne jamais le délai
Je suis en utilisant ksoap2 2.5.4 (Android 2.2), qui prend en charge délai d'attente. Je suis à l'aide d'Apache 2.2.16 le traitement de mes demandes. Tout fonctionne bien, mais lorsque j'ai arrêté mon Apache (ou de la déconnexion à distance du PC sur lequel tourne Apache) l'appel n'arrive jamais à expiration. Je suis en utilisant le thread séparé pour appeler mon WS et ce fil, arrêt de travail/répondre/stands pendant environ 2 minutes dans ce cas.
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
J'ai même essayé d'utiliser une Minuterie pour annuler ce thread après un délai prédéfini, mais il ne fonctionne pas. Fil est toujours là et est en attente de 2 minutes.
TimerTask task;
Timer mTimer;
task = new TimerTask() {
public void run() {
mThread.interrupt();
}
};
mTimer = new Timer();
mTimer.schedule(task, MSG_TIMEOUT);
Je reçois aussi cet avertissement qui peut avoir quelque chose à faire avec elle (je ne sais pas quoi faire avec elle):
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.
Est-il possible de faire KSOAP de travail ou pour améliorer la minuterie pour interrompre le thread après un délai prédéfini?
Merci pour la réponse ou une idée de ce à essayer!
OriginalL'auteur Warlock | 2011-03-30
Vous devez vous connecter pour publier un commentaire.
Utilisation ksoap2 API version 2.5.2 ou plus.
Vous pouvez la télécharger par cliquant ici
Et utiliser le code suivant tout en faisant l'objet de la HTTPTransport.
OriginalL'auteur Anjum Shrimali
Avez-vous téléchargé la source et ensuite compilé? Ou avez-vous utilisé un fini de fichier JAR?
Vais tester ça ce soir ou tôt dans la matinée de demain.
Et je suppose que vous aussi essayé celui que j'avais sur ma page? "ksoap2-android-assembly-2.5.2-jar-with-dependencies_timeout.jar". Je n'ai pas testé le fonctionnaire Pot après la fusion a été fait à partir de ma branche à la principale. Seulement visualisé le code. Mais je vois que l'exception n'Est pas correct.
IOException est levée lorsque le actuall TimeOutException devrait également être utilisées. J'ai essayé avec mon compilé Pot, et si le serveur (Webservice) est en baisse, le délai d'attente se produit. Si j'essaie de décrochage de la bande de roulement dans le webservice (timer qui attend 10 sec) le délai d'attente sera également se produire. Avez-test de délai d'attente pour les 6sec. Si le serveur répond avec quelques données et puis s'en va vers le bas de la bande de roulement à l'écoute pour les données (en mode debug) de s'arrêter et d'attendre à l'infini. Ce que je suppose doit être fixé de toute façon, mais je ne peux pas reproduire les erreurs que vous avez obtenu.
Avez-vous également recompilé avec votre jdk pour fixer les avertissements si ils peuvent vraiment influer sur le délai d'attente en quelque sorte?
Merci pour vos réponses. Je suis maintenant en utilisant ma propre solution pour l'envoi de messages soap. Il n'est donc pas si facile de tester à nouveau avec jar sur votre page web (ou recompiler officiel du code source). Mais j'espère qu'ils vont corriger que les erreurs d'Exception que vous avez mentionné dans la prochaine version. J'ai toujours essayé d'arrêter le serveur (commande d'Arrêt) ou serveur déconnecté physiquement sur le réseau local avant la connexion. Mais j'ai vu un comportement étrange (connexion parfois jamais de délai d'attente) sur "lent" et "bon marché" des téléphones, même lorsque le serveur est en ligne.
OriginalL'auteur Andreas Mattisson
Je vais avoir le même problème ksoap2-android-assemblage-2.5.6-jar-with-dependencies. J'aurais cru le ksoap valeur de délai d'expiration qui figure sur HttpTransportSE serait l'équivalent de ce que vous pouvez accomplir à l'aide de org.apache.http.client.HttpClient avec délai d'attente de connexion et le délai d'attente du socket pamameters:
HttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, SOCKET_TIMEOUT);
Je reçois enfin une exception socketexception "l'operation timed out" après ~3 minutes, peu importe la valeur que j'ai mis dans le timout paramètre sur HttpTransportSE. Mon serveur est en cours d'exécution, c'est juste de ne pas répondre à la demande.
OriginalL'auteur John
Cela semble encore un problème ouvert avec HttpTransportSE en ignorant la valeur de délai d'expiration dans certaines situations. Voir:
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
OriginalL'auteur John