1原理 :

服务端开发一个功能,然后发布一个http服务,然后客户端访问这个http服务,http服务内部先解析http请求体body (按照soap协议 规范构造的xml请求数据),然后调用功能实现类的对应方法获取结果。

2 关键点: 

1 如何知道有这个服务,如果获取这个服务提供了哪些功能? 

去注册中心查找是否有名称为xx 的服务,如果有,根据注册中心提供的地址,获取对应的wsdl文件 然后肉眼识别判断有哪些功能。

2 找到自己需要的服务和方法,如何调用?

框架提供好了客户端使用的api ,api内部会把客户端的触发封装成 http请求 ,http请求体 按照soap 协议 封装成对应的xml 数据并发送到 服务器

3 流程图

 

 java 网络学习之WebService的原理学习(11)

 

上图这些东西, 完完整整的呈现了WebService的整个原理流程:

1.       Client有需要,想调用一个服务,但不知道哪里去调用. 但知道UDDI Registry上可以查到。

2.       果然UDDI记录了某个一个叫做Web Server A的服务器能提供这样的服务。

3.       于是Client去Web Server A, 询问确切的调用方法。

4.       Web Server A看到Client提出的“确切方法查询”之后,立即返回给它一个WSDL描述的xml文档这里记录他能提供的各类方法接口.

5.       Client了解到这些之后,将这些xml的接口方法,封装成为HTTP请求, 发给Web Server A. 这些封装方式采用的是标准的SOAP方式, 实质是满足HTTP协议的一些SOAP的报文消息。

6.       Web Server A回应的也是HTTP协议的SOAP包. 这样双方的请求-响应完全畅通。

总结webservice 中应用到的各个组件的功能:

注册和发现Service(UDDI),

Service提供的接口描述(WSDL),

按照特定格式封装调用service所需的请求数据(SOAP),

传输数据(HTTP)

 

4 开发流程

情况A: 已知存在Web Service, 客户端的开发可以通过以下步骤:

  1. 通过UDDI,查找到Client程序需要的Web Service的位置
  2. 通过WebService找到 WSDL接口描述文件
  3. 通过工具,将步骤2得到的WSDL文件,生成一个Client Stub, 这个实质上是代码, 也就是打了一个桩。把这个stub的代码归并到Client程序中.
  4. 每次Client需要调用WebService的时候,直接调用步骤4生成的Stub 接口,就实现了对Server端的调用。

 情况B: Server端的开发,同样无需做解析SOAP这样的破事,框架会帮我们做好。大致步骤如下:

  1. 实现WebServer需要提供的所有功能

      2. 利用WSDL文件(或者IDL)生成Server Stub, 这些代码将负责接收从外界获得的请求,并将其转发给Web Server的Service Implementation(实现代码)。当Service Implementation的代码处理完,产生结果之后,又会把结果交给Server Stub, 然后 Server Stub可以产生一个SOAP的响应. Server Stub + Server Implementation 合在一起, 称为Web Service Container, 这玩意儿就是让发送到WebService的HTTP请求,直接送到Server Stub上面的。

 

 java 网络学习之WebService的原理学习(11)

5 优点缺点总结

优点:

1.       跨平台, 支持HTTP协议的主机和服务器, 都能够建立通信联系, 并且大部分的主机和服务器(99.999%以上)将支持HTTP协议。一般而言,不同目标主机之间的通信,需要通过防火墙,打开某个端口, HTTP协议的优势在于,防火墙一般不会封掉80端口, 这样就可以方便,安全的通信。

2.       跨语言, 任何语言, 都支持XML文本解析, 这个的目的是为了实现不同语言之间的通信, 通信的内容,是被xml限制的,因此这样进行通信,能跨越语言障碍,即, Java开发的服务端,客户端可以用C访问, 可以用java,VB等访问, 反之亦然。

缺点

我需要找到服务,然后获取到wsdl文件,需要自己读wsdl文件 并且生成一些stub类,这个很麻烦。

采用xml作为数据交换方式,效率低

基于http ,传递内容包括头文件,数据量大。

 

6 webservice 和http(get post )的比较:

 

1)web service相对http (post/get)有好处吗?

1.只需要提供一个地址,不需要提供接口文档,接口中实现的方法和要求参数一目了然。

2 不同的客户端只要通过ws的wsdl文件就能很简单的生成客户端代理程序来实现对ws的访问,

而且调用的时候可以传递 对象,并且不需要显示序列化。

3 客户端不用考虑与远程服务的底层交互细节,stub已经实现了,客户端只需要封装请求对象,

不需要设置任何http请求参数。
4.不用担心中文urlencode问题,stub 已经做了封装。



2)web service相对http(post/get)快吗?

由于要进行xml解析,速度可能会有所降低。



3)web service 可以被http(post/get)替代吗?

完全可以,而且现在的开放平台都是用的HTTP(post/get)实现的。

相关文章: