2011-09-25 7 views
0

안드로이드 에뮬레이터에서 .net 웹 서비스를 호출하려고하는데 연결 시간 초과 예외가 발생합니다.ksoap2 연결 시간 초과

웹 서비스를 호출하기 전에 문제없이 http://www.w3schools.com/webservices/tempconvert.asmx을 호출했습니다.

그래서 나는 안드로이드 응용 프로그램에서 내 .net webService에 문제가 있다고 가정합니다.

그물은

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

하고 자바는

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 위키에 링크 된 블로그 게시물이 있습니다. localhost 또는 동등한 장치를 사용할 수는 없지만 장치에 있지만 서버에서 서비스가 실행됩니다. 이제 코드를 다시 보았으므로 10.0.0.2가 가장 잘 작동하지 않습니다.

서버에서 ifconfig/ipconfig를 수행하고 해당 IP 주소를 사용하십시오. 나는 그 때 일할 것이라는 점을 내기했다.

+0

나는 시간 제한을 늘렸고 AsyncTask에서 호출을 이동했지만 여전히 동일한 오류가 발생합니다. – StrouMfios

+0

실제로 기기에서 서비스에 연결할 수 있습니까? 브라우저에서? –

+0

아니요 연결할 수 없습니다. 하지만 프로덕션 서버에 .net 응용 프로그램을 업로드하고 작동합니다. localhost에 문제가 생겼습니다. – StrouMfios