我一直在我的很多项目中使用 ksoap2-android 库来使用 SOAP Web 服务。为什么?因为我不知道任何替代品(也许没有)。
我的问题?它们在 GPRS/EDGE 网络上的可靠性(我住的地方没有 3G/4G)。
这是我通常使用的代码:
public String Login()
{
String status = "";
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
SOAP_LOGIN_METHOD);
request.addProperty("strUserName", Login.uName);
request.addProperty("strPassword", Login.pass);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
Log.d("Login Request: ", "" + request.toString());
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
try
{
httpTransport.call(SOAP_LOGIN_ACTION, envelope);
SoapObject response = (SoapObject) envelope.bodyIn;
status = response.getProperty("LoginResult").toString();
Log.d("Login Status: ", ""
+ response.getProperty("LoginResult").toString());
}
catch (Exception exception)
{
Log.d("Login Service Exception", exception.toString());
status = "-1";
}
return status;
}
现在在 wifi 网络上,这几乎可以正常工作,但是每当我通过 GPRS/EDGE 尝试相同的操作时,大多数服务调用都会返回 TIMEOUT 或 CONNECTION 错误。
我知道问题也部分出在网络上,但有时 Viber 调用工作正常(这里和那里有一点数据包丢失)但 web 服务失败。
我的问题?有什么方法可以通过 GPRS 网络提高 Android 上 SOAP 服务的可靠性?
我查看了 kSOAP2-android 文档,看看是否有任何帮助,例如,如果 HTTP 请求失败一次,并返回我们可以使用的东西,我们可以但它在一个循环中继续尝试直到它成功,但是返回类型大多是无效的。