0

我是 android 新手,我想调用 wcf 网络服务。我找到了 ksoap2 库并声明应用我找到的示例。应用程序失败并显示以下错误消息:java.net.SocketTimeoutException:连接超时。我在manafist文件上设置了用户权限,如下所示:

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

我还从模拟器设置应用程序-> 无线和网络-> 移动网络-> 接入点名称中添加了代理、端口、用户名和密码。我还在运行配置中添加了以下行到其他模拟器命令行选项:

-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 Int...@11:1 in java.io.InputStreamReader@40531d48)

我已经看到使用 ksoap2 使用 .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);
        }

    }

}

谢谢,

4

4 回答 4

0

您无法使用 localhost 或 127.0.0.1 从 android 访问本地计算机。您需要使用 10.0.2.2 来访问您的本地计算机。

其实我没有让android正确连接到WCF服务......

于 2011-06-12T19:31:39.797 回答
0

虽然这可能有点晚了,但这是为我解决的问题:

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,60000);

注意第二个参数,它是超时值。

我必须承认,我不知道这个值的比例,但我认为这是以毫秒为单位的。

于 2012-05-02T15:13:13.933 回答
0

连接超时发生在以下情况:

  • 成功找到所请求服务器的 IP 地址
  • 连接建立数据包被分派到 IP 地址
  • 目的地址故意忽略或不接收

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

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

于 2011-05-09T06:44:52.913 回答
0

添加这个:

StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder().permitAll().build(); 
        StrictMode.setThreadPolicy(policy);
于 2017-04-05T15:23:49.173 回答