1.6分布式通讯协议-WebService
RPC 包含的要素(webservice)
协议层:tcp/ip
应用层: http协议
SOAP: http+xml
分布式通信框架-webservice分析
什么是webservice
webservice也可以叫xml web service webservice, 轻量级的独立的通讯技术
- 基于web的服务:服务端提供的服务接口让客户端访问
- 跨平台、跨语言的整合方案
为什么要使用webservice
跨语言调用的解决方案
什么时候要去使用webservice
电商平台,订单的物流状态。
.net实现的webservice服务接口
webservice中的一些概念
WSDL(web service definition language webservice 定义语言)
webservice服务需要通过wsdl文件来说明自己有什么服务可以对外调用。并且有哪些方法、方法里面有哪些参数
wsdl基于XML(可扩展标记语言)去定义的
- 对应一个.wsdl的文件类型
- 定义了webservice的服务器端和客户端应用进行交互的传递数据和响应数据格式和方式
- 一个webservice对应唯一一个wsdl文档
SOAP(simple object access protocol简单对象访问协议)
http+xml
webservice通过http协议发送和接收请求时, 发送的内容(请求报文)和接收的内容(响应报文)都是采用xml格式进行封装
这些特定的HTTP消息头和XML内容格式就是SOAP协议
- 一种简单、基于HTTP和XML的协议
- soap消息:请求和响应消息
- http+xml报文
SEI(webservice endpoint interface webservice的终端接口)
webservice服务端用来处理请求的接口,也就是发布出去的接口。
开发一个webservice的实例
1.定义一个借口并用注解标明为WebService方法
@WebService interface ISayHello { @WebMethod public String Hello(String name); }
2.接口的实现
@WebService public class ISayHelloImpl implements ISayHello{ @Override public String Hello(String name) { return "hello,"+name+". I'm qiansion"; } }
3.用WebService发布
public class BootStrap { public static void main(String[] args) { Endpoint.publish("http://localhost:8888/qiansion/hello",new ISayHelloImpl()); System.out.println("publish success!"); } }
//服务启动之后,在浏览器输入:http://localhost:8888/qiansion/hello?wsdl
//就会返回wsdl文档
分析WSDL文档
Types
定义整服务端的数据报文
Schema
Message
定义了在通信中使用的消息的数据结构
PortType
定义服务器端的SEI
input/output表示输入/输出数据
Binding标签
- type属性: 引用porttype
<soap:binding style=”document”> 表示输出类型为文档
- operation : 指定实现方法
- input/output 表示输入和输出的数据类型
Service标签
service: 服务器端的一个webservice的容器
name属性: 指定客户端的容器类
address: 当前webservice的请求地址
Axis/Axis2
apache开源的webservice工具
可以通过Axis生成其他语言版本的客户端
CXF
Celtix+Xfire 。 用的很广泛,因为集成到了spring
Xfire
高性能的Webservice
HTTP+JSON (新的webservice)
HTTP+XML
springmvc+REST实现的新webservice