zoukankan      html  css  js  c++  java
  • 关于android客户端使用ksoap2调用wcf(.svc)的总结

    最近需要做一个android的项目调用.net的wcf,第一次做,花了好久,现在总结一下途中的许多问题,供大家参考,避免遇到同样的问题。

    1.首先是遇到的问题是android虚拟机无法上网。

    这个问题我弄了一天,不管怎么调就是不上网,一直瞎调试···后来打开浏览器发现网页也打不开,查了一下发现dns配置和自己的电脑的不一样的原因。

     在cmd-adb shell-setprop net.dns1 自己电脑的dns(详见上一篇转载)。

    当然,这个不能忘了哈

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

    2.实际连接的代码不多说了,网上有的是,我直接上代码了,这里面就是.svc和.asmx的区别了,注释的是.asmx的soaaction是命名空间+方法名,.svc的soapaction是命名空间+契约名(这个我不是很懂,不知道叫法有没有问题,欢迎指出错误)+方法名。其实很早就实现了连接.asmx后缀的,但是就是实现不了连接.svc的

    package com.example.wstest1;
    
    import java.io.IOException;
    
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.SoapFault;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.HttpTransportSE;
    import org.xmlpull.v1.XmlPullParserException;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
    
        private final static String TAG = "MainActivity";
        // 命名空间
        private static final String serviceNameSpace = "http://tempuri.org/";
        // 方法名称
        private static final String methodName = "ReceviceCommand";
        // 请求URL
        private static final String serviceURL = "http://10.14.4.67:3009/ITHmeApp/ITHomeService.svc";
        //private static final String serviceURL = "http://10.14.4.67:3009/ITHmeApp/ITHomeService.asmx";
        // SoapAction
        private static final String soapAction = "http://tempuri.org/IITHome/ReceviceCommand";
        //private static final String soapAction = "http://tempuri.org/ReceviceCommand";
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView t = (TextView) findViewById(R.id.test1);
            String re = getRequestData();
            t.setText(re);
            Log.e(TAG, re);
        }
    
        /**
         * 
         * @return
         * @throws IOException
         * @throws XmlPullParserException
         */
        private String getRequestData() {
            // 实例化SoapObject对象,指定webService的命名空间以及调用方法的名称
            SoapObject request = new SoapObject(serviceNameSpace, methodName);
            // example方法中有一个String的参数,这里将“android client”传递到example中
            request.addProperty("inputCommand", "oh");
            // 获得序列化的Envelope
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.bodyOut = request;
    
            // Android传输对象
            HttpTransportSE transport = new HttpTransportSE(serviceURL);
            transport.debug = true;
    
            // 调用WebService
            try {
                transport.call(soapAction, envelope);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                return e.getMessage();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                return e.getMessage();
            }
    
            try {
                if (envelope.getResponse() != null) {
                    return envelope.bodyIn.toString();
                }
            } catch (SoapFault e) {
                // TODO Auto-generated catch block
                return e.getMessage();
            }
    
            return null;
        }
    }

    3,这是核心问题了,纠结了好几天的问题,报错unterminated entity ref (position:TEXT

    这个问题在连接.asmx完全不存在,但是连接.svc就是怎么也找不到,然后找了一下国外的论坛终于发现,原来,是ksoap2版本的问题,我用的是最新的2.6.5,但是不知是2.6.5一个bug还是其他什么原因,需要换成2.5.7的,坑爹啊````

    欢迎大家访问yhy的新博客:一块吧 (www.yikuai8.com)
  • 相关阅读:
    VS2005 新控件之 容器 《PlaceHolder》
    vs2005/.NET2.0 控件演示之 超级链接 《HyperLink》
    VS2005 控件演示之 容器《Panel》
    投票系统[单/复选,投票数量/项随意][C#/SQL/文件包括数据库代码全部在]
    datalgrid\datalist\repeater\的用法以及相关小技巧
    使用XmlDocument类完成对XML的查、删、添、改(不完美,望指教)
    Repeater读取数据并分页
    vs2005控件演示之 MultiView
    datagrid 分页及隐藏指定列再以及鼠标动作(换背景)
    VS2.0控件之日历《Calendar》C#
  • 原文地址:https://www.cnblogs.com/yhongyu/p/2665178.html
Copyright © 2011-2022 走看看