2012-06-21 45 views
0

我能夠成功地從我的android應用程序調用.net web服務。用模擬器(2.2版apilevel 8到4.0.3 api level 15)進行測試,效果很好。從Android設備連接到Web服務時發生SocketTimeout異常(僅限設備不在仿真器)

我現在試圖用摩托羅​​拉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); 

欣賞的幫助。 謝謝!

+0

「java.net.SocketTimeoutException:連接超時」表示服務器沒有響應,或者沒有及時響應。但很難說如果你不提供堆棧跟蹤。 – Christine

+0

謝謝克莉絲汀。正如我寫的,它使用模擬器很好,所以服務器和代碼以及服務器權限都可以。 – abhinaw

+0

正如我所說,如果您不發佈堆棧跟蹤,該如何提供幫助? – Christine

回答

0

我正在更新它真正的晚。我發現託管web服務的服務器正在使用安全策略,並且不允許來自使用wifi的任何設備的呼叫。模擬器工作是因爲它在網絡中工作,因此不會影響安全性。我上面寫的代碼現在正在工作後,我改變了服務器的安全性,以允許來自使用我的WiFi設備的呼叫。

相關問題