2

我一直在我的很多项目中使用 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 请求失败一次,并返回我们可以使用的东西,我们可以但它在一个循环中继续尝试直到它成功,但是返回类型大多是无效的。

4

0 回答 0