0

我能够从我的 android 应用程序成功调用 .net webservice。用模拟器(2.2 apilevel 8 到 4.0.3 api level 15)对其进行了测试,效果很好。

我现在正在尝试使用摩托罗拉 razr MAZZ 设备测试相同的代码。它已连接,能够打断点并且能够执行所有功能,除了调用 web 服务。我收到“java.net.SocketTimeoutException:连接超时”。我的代码写在下面。它适用于模拟器,但不适用于设备。

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);

感谢帮助。谢谢!

4

1 回答 1

0

我真的很晚才更新。我发现托管 web 服务的服务器正在使用安全策略,并且不允许从任何使用 wifi 的设备进行呼叫。模拟器之所以有效,是因为它在网络内工作,因此不会干扰安全性。在我将服务器安全性更改为允许从使用我的 wifi 的设备进行呼叫后,我上面编写的代码现在可以工作了。

于 2012-08-30T13:50:11.883 回答