Android_WebServices_介绍
1.WebService的介绍
WebService为基于Web的服务。它使用Web(HTTP)方式,接收和响应请求。从而实现远程调用.
(1).从WebService的工作模式上理解的话。它跟普通的Web程序(比方ASP、JSP等)并没有本质的差别,都是基于HTTP传输协议的程序。
(2).WebService所使用的数据是基于XML格式的和SOAP协议。
当中SOAP即简单对象訪问协议(Simple Object Access Protocal)协议是一种基于XML编码规范的文本协议。
2.WebService三要素
WebService三要素:SOAP、WSDL(WebServices Description Language)、UDDI(Universal Description Discovery and Integration)
(1).SOAP
1).SOAP介绍
SOAP消息基本上是从发送端到接收端的单向传输。但它们经常结合起来运行类似于请求 / 应答的模式。全部的 SOAP消息都使用 XML 编码。一条 SOAP消息就是一个包括有一个必需的 SOAP 的封装包,一个可选的 SOAP 标头和一个必需的 SOAP 体块的 XML 文档。把 SOAP 绑定到 HTTP 提供了同一时候利用 SOAP 的样式和分散的灵活性的特点以及 HTTP 的丰富的特征库的长处。
在HTTP上传送 SOAP 并非说 SOAP 会覆盖现有的 HTTP 语义,而是 HTTP 上的 SOAP 语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上。而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用 SOAP 并不仅限于 HTTP 协议绑定。
SOAP也能够绑定到TCP和UDP协议上。
2).SOAP消息格式
<SOAP-ENV:Envelope 各种属性="" > <SOAP:HEADER> </SOAP:HEADER> <SOAP:Body> </SOAP:Body> </SOAP-ENV:Envelope>3).语法规则
一条 SOAP 消息就是一个普通的 XML 文档。包括下列元素:必需的 Envelope 元素。可把此 XML 文档标识为一条 SOAP 消息可选的 Header 元素,包括头部信息必需的 Body 元素,包括全部的调用和响应信息可选的 Fault 元素。提供有关在处理此消息所错误发生的信息
(2).WSDL
Web Service描写叙述语言WSDL 就是用机器能阅读的方式提供的一个正式描写叙述文档而基于XML的语言,用于描写叙述Web Service及其函数、參数和返回值。由于是基于XML的,所以WSDL既是机器可阅读的。又是人可阅读的。
(3).UDDI
UDDI 是一种文件夹服务,企业能够使用它对 Web services 进行注冊和搜索。UDDI。英文为 "Universal Description, Discovery and Integration",可译为“通用描写叙述、发现与集成服务”
3.在Android上的应用
在Android平台调用WebService须要依赖于第三方类库ksoap2,它是一个SOAP Web serviceclient开发包。
KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包,等同于Android平台上的KSoap2的移植版本号。眼下最新版本号ksoap2-android-assembly-3.3.0-jar-with-dependencies.jar,下载地址是:http://code.google.com/p/ksoap2-android/
4.简单调用实例
public void getRemoteInfo(String phoneSec) { String nameSpace = "http://WebXml.com.cn/"; String methodName = "getMobileCodeInfo"; String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx"; String soapAction = "http://WebXml.com.cn/getMobileCodeInfo"; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); rpc.addProperty("mobileCode", phoneSec); rpc.addProperty("userId", ""); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10); envelope.bodyOut = rpc; envelope.dotNet = true; HttpTransportSE transport = new HttpTransportSE(endPoint); try { // 调用WebService transport.call(soapAction, envelope); // 获取返回的数据 SoapObject object = (SoapObject) envelope.bodyIn; // 获取返回的结果 final String result = object.getProperty(0).toString(); toast(result); } catch (Exception e) { e.printStackTrace(); toast(e.getMessage()); } }
版权声明:本文博客原创文章。博客,未经同意,不得转载。