2011-05-07 64 views
0

我是新来的android,我想调用wcf web服务。我找到了ksoap2库并声明应用我找到的示例。该应用失败,出现以下错误消息:java.net.SocketTimeoutException:连接超时。 我已经设置用户权限的manafist文件这样的:在Android应用上使用kso​​ap2调用wcf web服务失败,出现以下错误java.net.SocketTimeoutException:连接超时

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

我还添加从仿真器的代理,端口,用户名和密码设置APP->无线和网络 - >移动网络 - >接入点名称。 我还增加了从运行配置如下行额外的仿真器命令行选项:

-dns-server ns15.unitechost.in 

但还是没有工作,任何帮助,将不胜感激。

更新

我已经配置了代理使用以下命令启动AVD时,在命令行设置:

emulator -avd <avd_name> [-<option> [<value>]] ... [-<qemu args>] 

现在,我得到以下异常:

org.xmlpull.v1.XmlPullParserException: unexpected type (position:TEXT HTTP/1.1 500 [email protected]:1 in [email protected]) 

我已经看到了使用kso​​ap2来使用.asmx web服务的例子,这是否也可以在.svc web服务上完成? 我使用附带的代码,我从一个有若例子:

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

public class Main extends Activity { 
    /** Called when the activity is first created. */ 

    private static final String SOAP_ACTION = "http://tempuri.org/Istock/getCountry"; 
    private static final String OPERATION_NAME = "getCountry"; 
    private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/"; 
    private static final String SOAP_ADDRESS = "http://127.0.0.1:8080/Service1.svc"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TextView textView = new TextView(this); 
     setContentView(textView); 
     SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, 
     OPERATION_NAME); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
     SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS); 
     try 
     { 

     httpTransport.call(SOAP_ACTION, envelope); 
     Object response = envelope.getResponse(); 
     textView.setText(response.toString()); 
     System.out.println(response.toString()); 
     } 
     catch (Exception exception) 
     { 
     String exceptionStr=exception.toString(); 
     textView.setText(exceptionStr); 
     System.out.println(exceptionStr); 
     Log.i("TAG",exceptionStr); 
     } 

    } 

} 

谢谢,发生

回答

0

连接超时时:

  • 的请求的服务器的IP地址是成功发现
  • 连接建立数据包被分派到IP地址
  • 目标地址故意忽略或做n OT接受他们

连接超时,类似的连接被拒绝,但在这种情况下,目标系统实际上是将数据包发送回说:“走,有你试图连接到端口上没有运行服务”

连接超时是网络环境中的预期行为。在网络连接可能不可靠的移动环境中,这一点甚至更令人期待。这意味着服务器无法响应一定的秒数。

0

您无法通过使用本地主机或来自android的127.0.0.1来访问您的本地机器。您需要使用10.0.2.2访问本地计算机。

其实我没能获得Android连接到正确的WCF服务...

0

虽然这可能是晚了一点,这是固定的对我来说:

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,60000); 

公告第二个参数,即超时值。

我必须承认强硬,我不知道用这个值去衡量,但我认为这是以毫秒为单位来衡量的。

0

补充一点:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
相关问题