WebService的简介, 原理, 使用

 

第一部分: 直观概述

WebService的几种概念:

以HTTP协议为基础,通过XML进行客户端和服务器端通信的框架/组件

两个关键点:

1.       服务端提供的功能, 通过xml描述

2.       第一步中的描述的功能, 嵌入到HTTP协议中, 使得能通过HTTP协议进行通信【所谓的SOAP】.

用图可以如下表示:

图一: WebService的简要表示

采用这两个技术的目的主要是:

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

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

第二部分: 基本原理和架构

当然,架构比我们上面说到的图要更为复杂,上面只是说明了一来一回的通信, 实际情况还需要考虑以下问题, 参照图例说明:

1. 服务器端(Provider) 提供统一的标准化服务。就像开办一个公司(即Server Provider), 工商行政管理局,注册一下公司地址和性质。目的是, 别人要用公司的服务,从工商管理局就知道你的地址。这样统一的做法,是方便所有的公司以及所有需要公司提供服务的客户。并且这些信息是最大限度的公开。

2. 客户端(Requester) 到注册中心(Registry)拿到公司的基本信息之后, 去找到这个公司, 然后使用该公司提供的服务。

图二: 基本的WebService架构流程图

注意上面图中的基本步骤的标号, 解释如下

1. Provider节点提供好服务后, 首先注册到节点Registry

2和3. Requester节点到Regitry节点查信息, 找到需要的Provider及其提供的Service

4. Requester使用Provider提供的服务

更具体的介绍, 参照参考文献[2], 下面这些基本由这个参考文献翻译而来:

图三: 细节步骤流程图

上图这些东西, 完完整整的呈现了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包. 这样双方的请求-响应完全畅通。

上面我们看到的是应用原理图, 进一步深入, 可以发现如下的协议架构图:

图四: 协议结构

上面我们已经花了很大的精力, 介绍了发现Service(UDDI), Service提供的接口描述(WSDL), 调用Service(SOAP), 以及传输(HTTP)的的整个过程。因此不再做介绍。这个技术的核心是SOAP.

第三部分: 实践WebService

看到上面的图那么复杂, 实质上SOAP+HTTP协议已经足够成熟,犯不着让我们通过xml生成带有SOAP变迁的HTML脚本, 有很多工具可以帮住我们实现。事实上,开发起来还是相当简便的。

情况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上面的。

图五:实际应用中的调用

参考资料:

1. http://www.axaptapedia.com/Webservice

2. http://gdp.globus.org/gt3-tutorial/multiplehtml/ch01s02.html

3.   http://blog.csdn.net/gnuhpc/archive/2009/12/22/5047951.aspx

WebService的简介, 原理, 使用,流程图的更多相关文章

  1. webservice入门简介

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 webservice入门简介 1.什么是webservice? webservice是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓的远 ...

  2. Jersey框架一:Jersey RESTful WebService框架简介

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  3. LeakCanary 内存泄漏 监测 性能优化 简介 原理 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. RxJava RxPermissions 动态权限 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. RxJava 教程-1 简介 原理 线程控制 变换

    简介 RxJava 是什么? RxJava 在 GitHub 主页上的自我介绍是 RxJava is a Java VM implementation of ReactiveX: a library ...

  6. WebService 的工作原理

    Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...

  7. Xposed 框架 hook 简介 原理 案例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. WebService 之 工作原理

    一.Web Service基本概念 Web Service 也叫 XML Web Service,WebService 是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求 ...

  9. ZooKeeper教程资源收集(简介/原理/示例/解决方案)

    菩提树下的杨过: ZooKeeper 笔记(1) 安装部署及hello world ZooKeeper 笔记(2) 监听数据变化 ZooKeeper 笔记(3) 实战应用之[统一配置管理] ZooKe ...

随机推荐

  1. Linux下安装并配置SSH服务

    一.使用命令检测Linux系统上是否已经安装了SSH服务:(命令:rpm -qa |grep ssh) 二.如果没有安装SSH软件包,可以通过yum 或rpm安装包进行安装(命令:yum instal ...

  2. 在Linux系统里安装Virtual Box的详细步骤

    今天我试图在Linux 服务器上安装Kyma时,遇到如下错误消息: E1009 23:51:37.685891 358 start.go:174] Error starting host: Error ...

  3. 《队长说得队》【Alpha】Scrum meeting 3

    项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...

  4. JavaScript -- 内置对象数组

    数组 创建数组的基本方式有两种: 1.使用 Array构造函数 语法:new Array() 小括号( )说明: (1)预先知道数组要保存的项目数量 (2)向Array构造函数中传递数组应包含的项 2 ...

  5. s///|s()()i|/i|/g|\U|\u|\L|\l|\U\l|split|join|匹配到hash|匹配到变量|`date`|$^I

    #!/usr/bin/perl -w use strict; use warnings; $_='She is a good girl and likes helping others '; s/sh ...

  6. RabbitMQ Server的安装、配置及常用命令

    首先需要安装Erlang环境: http://www.rabbitmq.com/server.html 下载RabbitMQ Server的windows安装包并安装到D盘下: http://www. ...

  7. if...else...这段代码打印结果,并简述其理由

    var age = 20; if (age >= 6) { console.log('teenager'); } else if (age >= 18) { console.log('ad ...

  8. iOS开发-动画总结

    一.简介 IOS 动画主要是指Core Animation框架.官方使用文档地址为:Core Animation Guide.Core Animation是IOS和OS X平台上负责图形渲染与动画的基 ...

  9. runtime比较全面的总结

    类和对象 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者 ...

  10. ES6 -- 模板字符串(反单引号)

    1)直接使用变量 // before var str = 'test'; console.log(str + "123"); // now var str = 'test'; co ...