我能够成功地从我的安卓应用程序调用.net Web服务。 使用模拟器(2.2 apilevel 8到4.0.3 api level 15)对其进行了测试,效果很好。
我现在正在尝试使用摩托罗拉razr MAZZ设备测试相同的代码。它是连接的,能够命中断点,并且能够执行除调用 Web 服务之外的所有功能。我收到"java.net.SocketTimeoutException: Connection Timeoutout"。 我的代码写在下面。它适用于模拟器,但不适用于设备。
URL = UtilsAct.Instance().GetSettingString(ctx, "sett_url");
String str="";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("IsEncrypted",false);
request.addProperty("routes", "EAST");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,60000);
try
{
androidHttpTransport.call(SOAP_ACTION, envelope); // java.net.SocketTimeoutException: Connection timed out
Object receivedObj = envelope.getResponse();
str = receivedObj.toString();
}
catch(Exception e)
{
//e.printStackTrace();
String errmsg = "Exception:";
if(e.getMessage() != null)
errmsg = errmsg + e.getMessage();
}
我尝试了各种文章中给出的所有技巧,包括
HttpConnectionParams.setConnectionTimeout(params, timeout);
HttpConnectionParams.setSoTimeout(params, timeout);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(timeout);
urlConnection.setReadTimeout(timeout);
感谢帮助。谢谢!
我更新得很晚。我发现托管网络服务的服务器正在使用安全策略,并且不允许从任何使用 wifi 的设备拨打电话。模拟器之所以有效,是因为它在网络内工作,因此不会干扰安全性。在我更改服务器安全性以允许使用我的 wifi 从设备呼叫后,我上面编写的代码现在可以工作了。