2011-09-25 64 views
0

我想從Android模擬器調用.NET Web服務,但我得到的連接超時異常。ksoap2連接超時

我試着打電話給我的web服務之前,我叫http://www.w3schools.com/webservices/tempconvert.asmx沒有問題。

所以我假設把我在.NET Web服務上無論是在Android應用程序有些不對勁。

的.NET是

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService] 
public class Pros : System.Web.Services.WebService { 

    [WebMethod] 
    public List<Product> Get(int pageIndex,int pageSize) { 
     var efUnitOfWork = new EFUnitOfWork(); 
     var productsRepos = new ProductRepository(new EFRepository<Product>(), efUnitOfWork); 
     return (List<Product>)productsRepos.GetByPage(pageIndex, pageSize); 
    } 
} 

和Java是

private static final String METHOD_NAME = "Get"; 
private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL = "http://10.0.0.2:2807/webservices/webService.asmx"; 
private static String SOAP_ACTION = NAMESPACE+METHOD_NAME; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try { 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     request.addProperty("pageIndex", "0"); 
     request.addProperty("pageSize", "10"); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet=true; 
     envelope.setOutputSoapObject(request); 

     AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapObject result=(SoapObject)envelope.getResponse(); 

     String resultData=result.getProperty(0).toString(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

我缺少的東西?

回答

0

你可以試着增加這樣的呼叫超時:

AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL, 15000); 
0

你應該嘗試的提及,但更重要的是你有你的呼叫轉移到一個後臺線程來增加超時。使用AsyncTask。

而且在評論中討論有一個博客帖子在ksoap2,Android的維基,詳細解釋了連接東西聯繫在一起。您不能使用本地主機或等效設備,因爲它在設備上,但您的服務在服務器上運行..現在我再次查看代碼.. 10.0.0.2不太可能工作。

做服務器上使用ifconfig/ipconfig並使用該IP地址。我敢打賭,它會工作。

+0

我增加了超時和我在的AsyncTask移動電話,但我仍然得到同樣的錯誤。 – StrouMfios

+0

您真的可以連接到設備的服務嗎?在瀏覽器上? –

+0

不,我無法連接。但是我將.net應用程序上傳到生產服務器,並且它可以正常工作。本地主機出現問題。 – StrouMfios