Web service

什么是Web Service

  • 一个 Web 服务就是一个应用程序,它可以通过轻量级的、与厂商无关的通信协议从其他的系统跨网络(Internet 或者 Intranet)接受 XML 格式的请求
  • 基于XML的一种分布式计算技术、一种中间件技术
  • 一种松散耦合的、面向服务的架构
          在这种面向服务的架构中,接口的定义是至关重要的。正是接口定义(通常由 WSDL 来表达)作为服务所提供的东西和客户端所期望的结果之间的合约。
        为了确保参与的各方是松散耦合的,必须同意两个关键的事项:
               共同的通信格式(也就是消息的样式)和共同的协议(也就是消息如何到达)。

        最常见的组合是通过 HTTP(协议)的 SOAP (格式)


调用Webservice

            

一、准备工作:

1、下载ksoap2(后面说明作用)   到官网http://code.google.com/p/ksoap2-android/可下载最新jar。

2、新建Android项目,找到AndroidManifest.xml,在<manifest></manifest>之间加入<uses-permission android:name="android.permission.INTERNET" />语句。(由于Android本身线程安全机制的存在,不加入此语句会抛相应网络异常)。

3、将ksoap2 jar包导入项目,方式一:直接复制并粘贴进Android项目中的libs文件夹中。方式二:右键项目,选择Properties->Java  Build Path->Libraries->Add External JARs 添加对应jar包。

准备工作完成。

二、编写WebService类

1、定义命名空间、Webservice地址、方法名、方法对应Action等参数:

例:

    //命名空间  
    private static final String NAMESPACE = "http://tempuri.org/";  
    //WebService地址  
    private static final String URL = "http://wcf.scaucs.net/MainService.svc";  
    //需要调用的方法名  
    private static final String METHOD = "UserLogin";
    //方法对应的Action
    private static final String ACTION = "http://tempuri.org/IMainService/UserLogin";

2、实例化SoapObject对象并设置方法相关参数:(此时SoapObject相关操作由ksoap2 jar包提供,也就是说没该jar包此处便无法完成)

例:

    //1.实例化SoapObject对象  
            SoapObject request = new SoapObject(NAMESPACE, METHOD);  
            //2.如果方法需要参数,设置参数 ( UserLogin(strUserName,strPassWordMd5)方法参数) 
            request.addProperty("strUserName", "201131000423");
            request.addProperty("strPassWordMd5", "9775A1BCFFDA8D65C279D2E18E1C7AF0");


3、设置Soap的请求信息,参数部分为Soap协议的版本号(此版本号对应调用服务端版本号,设置错误会抛异常)

例:

            //3.设置Soap的请求信息,参数部分为Soap协议的版本号  
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  
            envelope.dotNet = true;
            envelope.bodyOut=request;
            envelope.setOutputSoapObject(request);              
            

4、构建Http传输对象:

例:

            //4.构建传输对象  
            HttpTransportSE transport = new HttpTransportSE(URL);  
            transport.debug = true;  
//设置可否调试


5、访问WebService,第一个参数为调用方法的Aciton,第二个参数为Envelope对象,并取得返回对象

例:

        //5.访问WebService,第一个参数为调用方法的Aciton,第二个参数为Envelope对象  
        try {  
            transport.call(ACTION, envelope);
            //解析返回的数据
(返回数据的方式有两种,1:envelope.bodyIn 2:envelop.getResponse)  
           
String result = envelope.getResponse().toString();
       
//注意这里envelope返回的数据是SoapObject类型,要经过进一步的解析才能得到想要的数据。(附录详解)

} catch (IOException e) {  
            e.printStackTrace();
        } catch (XmlPullParserException e) {  
            e.printStackTrace();
        }
 

return result;

上述代码完整版本:

public String login(String number) {
     String result = "";
            //1.实例化SoapObject对象  
            SoapObject request = new SoapObject(NAMESPACE, METHOD);  
            //2.如果方法需要参数,设置参数  
            request.addProperty("strUserName", number);
            request.addProperty("strPassWordMd5", "9775A1BCFFDA8D65C279D2E18E1C7AF0");
            //3.设置Soap的请求信息,参数部分为Soap协议的版本号  
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  
            envelope.dotNet = true;
            envelope.bodyOut=request;
            envelope.setOutputSoapObject(request);              
            //4.构建传输对象  
            HttpTransportSE transport = new HttpTransportSE(URL);  
            transport.debug = true;               
            //5.访问WebService,第一个参数为调用方法的Aciton,第二个参数为Envelope对象  
        try {  
            transport.call(ACTION, envelope);
            //6.解析返回的数据  
            result = envelope.getResponse().toString();
        } catch (IOException e) {  
            e.printStackTrace();
        } catch (XmlPullParserException e) {  
            e.printStackTrace();
        }  
        return result;
    }  

(资源来至: http://blog.csdn.net/u014291735/article/details/23336263
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值