Hola es la primera pregunta que realizo y espero tener un buen resultado de antemano agradezco su apoyo.
Tengo una APP que requiere consumir un Web Services SOAP.
Actualmente funciona correctamente en conexiones Wiffi o Datos Móviles en los que la señal es "Estable", pero tengo problemas cuando la señal de es inestable (Wiffi que se desconecta o conecta a cada momento, Datos Móviles saltando de 3G a H, etc), ya que en zonas en donde la conexión es muy inestable simplemente no encuentra el Web Services y termina saliendo por Time Out.
El problema no seria tan grabe si simplemente no se comunicara, pero el problema empieza cuando logra ejecutar el método del Web Services pero por alguna razón se queda esperando la respuesta y nunca llega.
Al revisar el log de mi Web Services, noto que la respuesta se envió en menos de 1 segundo, lo cual es normal, pero en mi APP no recibo nada.
Incluso implemente un método si por alguna razón salgo por TimeOut intente una confirmación para validar si se opero o no el movimiento anterior, pero es el mismo caso.
private Map<String, String> EjecutarMetodo(String params, boolean timeout){
int msl = 15000;
if (timeout){
msl = 5000;
}
String URL = wsParam.getUrl(Integer.parseInt(params));
SoapSerializationEnvelope SOBRE = wsParam.getSobre(Integer.parseInt(params));
Map<String, String> respons = new HashMap<String , String>();
// Modelo el request
Metodo request = new Metodo(metodo, datos, actividad);
// Modelo el Sobre
SOBRE.setOutputSoapObject(request.sobre());
// Modelo el transporte
try {
HttpTransportSE transporte = new HttpTransportSE(Proxy.NO_PROXY, URL, msl);
transporte.debug = true;
//System.setProperty("http.keepAlive", "false");
// Llamada
transporte.call(request.getSoapAction(), SOBRE);
SoapObject resp = (SoapObject) SOBRE.getResponse();
respons = request.respuesta(resp,actividad);
} catch (SocketTimeoutException e) {
e.printStackTrace();
respons.put("TIMEOUT", "No se establecido conexión.\n" +
"Por favor verifique su conexión a internet.\n" +
"Contacte a Soporte Tecnico");
} catch (Exception e) {
e.printStackTrace();
respons.put("ERROR", "No se establecido conexión.\n" +
"Por favor verifique su conexión a internet.\n" +
"Contacte a Soporte Tecnico");
}
return respons;
}
Cave mencionar que ejecuto un par de veces el llamado al Web Services y había pensado que talves saturaba la conexión o algo por el estilo, por lo que agregue el keepAlive que esta comentarizado, pero es el mismo resultado.
Agradezco sus comentarios apoyo en este detalle.