android中使用ksoap2调用web servie(asmx)时,HttpTransportSE.call速度为何极慢?
操作环境:
一台Android终端(IP:192.168.1.101)通过路由器访问另一台服务器上(IP:192.168.1.102)的asp.net Web service(asmx)。也就是说,Android终端和服务器通过路由器连接,构成一个最简单的内部网Intranet。
现象:
如果把路由器接入互联网Internet, 则HttpTransportSE.call的执行可以很快完成;而如果我把路由器断开与互联网的连接,则HttpTransportSE.call的执行速度非常慢,需要花费较长的时间才能够返回。
Android的核心代码:
String strLoginID = new String("");
String strNameSpace = "http://tempuri.org/";
String strMethodName = "Login";
String strURI = "http://192.168.1.102:8080/ForAndroid/Service.asmx";
String strSoapAction = strNameSpace + strMethodName;
HttpTransportSE transport = new HttpTransportSE(strURI);
transport.debug = false;
SoapObject soapObeject = new SoapObject(strNameSpace, strMethodName);
soapObeject.addProperty("userid", strAccount);
soapObeject.addProperty("pwd", strPassword);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.bodyOut = transport;
envelope.dotNet = true;
envelope.setOutputSoapObject(soapObeject);
try {
transport.call(strSoapAction, envelope);
strLoginID = envelope.getResponse().toString();
} catch (IOException e) {
//...
return;
} catch (XmlPullParserException e) {
// ...
return;
}
版本信息:
android: 2.3.4
ksoap: ksoap2-android-assembly-2.6.4-jar-with-dependencies.jar
另外,传输的数据量非常小,不超过256bytes。