简单的说, 就是客户端根据WSDL 生成 SOAP 的请求消息, 通过 HTTP 传输方式(也可以是其它传输方式, 如 FTP 或STMP 等,目前 HTTP 传输方式已经成为 J2EE Web Service 的标准)传给对方, 服务方实现服务请求, Web Service(Web服务)将结果以 SOAP 的消息格式返回给客户端。

如果人工去创建和解析基于 XML 格式的 SOAP 消息还是一个非常复杂的过程, 这样 JAX-RPC 应时而生, 他实现了J2EE Web Sercive  的远程分布式调用。

JAX - RPC :Java APIs for XML-Based Remote Procedure Call. 它本质上是另一种RMI。 只是 JAX-RPC 以 SOAP 作为通信协议, RMI 以 RMI- IIOP或者 RMI - JRMP为通信协议。

客户端需要根据 WSDL 创建客户端 Java 程序, 其中包括 Stub 程序。 客户端调用相应的Stub 程序, 进一步调用JAX- RPC 运行环境创建 SOAP 请求消息, 通过 HTTP 传输给服务器端。

Web 服务器端的JAX-RPC 运行环境在收到 SOAP 请求消息后, 对 SOAP 的 XML 内容进行解析, 再通过 Tie 来调用服务接口实现类。(无状态会话 Bean 或者 Java  对象) ,得到结果后, 创建SOAP 响应消息返回给客户端。

客户端基于JAX- RPC 实现远程分布式调用的基本原理

(1)通过 JAX-RPC 创建 SOAP 请求消息
(2)通过 JAX- RPC 将 SOAP 请求消息送到服务地址
(3)通过 JAX- RPC 解析 SOAP 请求消息

服务器端基于 JAX-RPC 实现远程分布式调用的基本原理

服务器端的 JAX-RPC 的运行环境在收到了基于 XML 格式的SOAP 请求消息后, 会调用服务器端的 JAX-RPC Tie 对象的相应服务接口方法checkUserLogin, 将上面的基于 XML 格式的 SOAP 请求消息中的参数值映射为 Java 对象类传给 Tie 对象的接口方法, 将 loginName 和 password 都转化为 Java 的String 类型。 这是前述的 WSDL 中所定义的类型。

利用设计模式

设计模式在设计Webservice的时候显然可以起到相当大的作用。设计模式的主要目的就是为解决某些在类似环境下的相像问题提供已有的较为成熟的设计方案。在这里,只简单的提及一些很常用的模式,让我们了解到模式在Webservice中可以起到的作用。

Adapter :为内部系统提供一个不同的接口

Façade:封装复杂的内部实现,提供一系列简单的接口

Proxy: 作为其他对象的代理,代替它提供服务
 
Adapter 模式用于将一个组件的接口转化成客户所需要的样子,这里的客户就是Webservice。一个常见的情况就是将原有的老的系统包装成一个Webservice。比如现在使用的是J2EE的平台,而原来有一个C++的系统实现了某些功能,现在需要将它发布成Webservice,那么就需要利用JNI技术做一个Adapter,为原来的C++组件提供一个Java的接口,然后再转化为Webservice。
 
Façade 模式用于构建粗粒度的服务,它包装了细粒度的服务,从而为复杂的系统提供了一个简单的接口。在J2EE中,Session Bean就象是一个Façade,而Entity Bean则是细粒度的服务。在Webservice中也一样,使用Façade模式可以将已有的组件的功能发挥殆尽。
 
Proxy 模式用于充当其他对象的代理,类似于中间人的作用,将处理工作从一个对象传递到另一个对象。在Webservice中,它主要用于隐藏Soap消息构造的过程。也可以用于模拟对象(Mock Object)的创建。
 
以上仅仅是一些可以用于Webservice开发的模式,如果你熟练的将这些模式应用于Webservice开发,你将会发现开发Webservice应用,将好像做一种特殊的面向对象设计。
 
安全

Webservice为作为方便的服务被用广大领域使用的同时,也成为了黑客们的美食。在这里,本文将就目前对Webservice安全所能做的改进做简单介绍。

在Webservice中的安全主要分为以下三个方面。

传输      SSL/HTTPS 对连接加密,而不是传输数据

消息      数据加密(XML Encryption)   数字签名(XML-DSIG)

底层架构  利用应用服务安全机制
 
传输时的安全是最容易被加入到你的Webservice应用中的,利用现有的SSL 和HTTPS协议,就可以很容易的获得连接过程中的安全。
 
然而这种安全实现方法有两个弱点。一是它只能保证数据传输的安全,而不是数据本身的安全,数据一旦到达某地,那么就可以被任何人所查看。而在Webservice中,一份数据可能到达多个地方,而这份数据却不该被所有的接受者所查看。二是它提供的是要么全有要么全无的保护,你不能选择哪部分数据要被保护,而这种可选择性也是在Webservice中所常要用到的。
 
第二层的保护是对于消息本身的保护。你可以使用已有的XML安全扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改过。XML文件的加密技术从更大程度上加强了Webservice的安全,它能够定制数据传输到后,能否被接受者所查看,进一步完善了传输后的安全,业界也在不断的制定Webservice的安全标准,比如SAML 和 WS-Security。
 
最后一层保护就是依靠底层架构的安全,这更多的来自于操作系统和某些中间件的保护。比如在J2EE中,主持Webservice的应用服务器。目前很多的J2EE应用服务器都支持Java Authentication and Authorization Service (JAAS),这是最近被加入到J2SE 1.4当中的。利用主持Webservice的服务器,实现一些安全机制这是很自然的做法。另一种利用底层架构的安全方法就是,做一个独立的负责安全的服务器,Webservice的使用者和创建者都需要与之取得安全信任。

转载:http://www.myds.cn/files/highlight-1017.html

Web Service实现分布式服务的基本原理相关推荐

  1. Windows Phone访问web service和WCF服务

    Windows phone也像传统的.net应用一样,可以方便的调用web service和WCF服务. 首先创建一个web service服务,因为.NET Framework 4的版本没有Web ...

  2. Web Service 实现分布式事务

    首先要声明,不推荐在web service中实现分布式事务. 原因如下: 1.webservice在通信层上是一种无连接的协议,每两次调用之间,tcp连接是断开的.而分布式事务需要保存事务上下文,这是 ...

  3. 3.菜鸟教你一步一步开发 web service 之 axis 服务端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37610601 第一步,新建一个工程,如图: 选 Java 写一个工程名,选择好工程路径 ...

  4. IIS上的web service调用AX服务问题

    将web service部署在IIS上后,用windows身份认证调用AX服务,不能访问AX 解决方法:修改应用程序池的标识,改为business connector 账户 转载于:https://w ...

  5. [Axis2与Eclipse整合开发Web Service系列之三] 服务端返回值

    前言 在前面的三篇中 [Axis2与Eclipse整合开发Web Service系列之一] 生成Web Service Client(将WSDl 转化成 Java代码) [Axis2与Eclipse整 ...

  6. 【分布计算环境学习笔记】9 Web Service

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.概述: 在现有的各种异构平台的基础上,构筑一个通用的,与应用无关.语言无关的技术层,各种不同平台之上的应用依 ...

  7. SOA技术相关介绍(RPC, Web Service, REST,SOAP,JMI)

    概念介绍 SOA(面向服务的软件架构.Service Oriented Architecture),是一种软件设计模式,主要应用于不同应用组件之间通过某种协议来互操作.例如典型的  通信网络协议.因此 ...

  8. java snmp全面开发解决方案(web service snmp网关、代理snmp网关、网络拓扑发现、SNMP数据采集等)...

    ObjectSNMP是一个面向对象的SNMP开发组件,与关系数据库流行的O-R Mapping技术类似,实现了Object到SNMP MIB的操作映射(简称O-M Mapping),系统提供了Java ...

  9. 【架构】分布式服务架构与微服务架构

    文章目录 0)服务相关架构的演变 *关于面向对象.面向组件.面向服务 1)面向服务架构(SOA) 1.1 什么是面向服务架构(SOA)? 1.2 为什么需要SOA? 1.3 SOA 的特征 1.4 S ...

最新文章

  1. ubuntu mysql允许远程连接mysql_ubuntu下允许mysql远程连接
  2. 未来安防人工智能需要攻克的几大技术方向
  3. JS验证框架的使用方法
  4. 书中自有黄金屋~外加中奖结果通知
  5. V8 之旅: 垃圾回收器
  6. JS经常使用正則表達式【分享】
  7. 直接用自己服务器做图床可以吗_图床趣事
  8. 线性回归与分类, 解决与区别
  9. 利用openmp实现矩阵相乘_矩阵快速幂
  10. OKR与KPI有什么区别
  11. PC天翼云盘v6.3.4精简版
  12. 腾讯云~安装MongoDB
  13. 斗罗大陆壁纸图片高清小舞146集八段摔杨无敌
  14. java.sql.SQLException: Parameter index out of range (4 number of parameters, which is 2).
  15. 神经网络与深度学习(入门篇)
  16. 宇宙最强IDE!微软正式宣布 Visual Studio 2019
  17. 基于JAVA星星电影购票网站计算机毕业设计源码+系统+数据库+lw文档+部署
  18. ac1900修改代理服务器,AC1900路由器怎么设置? | 192路由网
  19. Android View的elevation属性,CardView始终在布局顶层覆盖其它控件的解决方式;
  20. python做三维图片挑战眼力_挑战眼力!三维立体图片你能看出几个

热门文章

  1. C语言:---gdb多线程调试
  2. Redis:05---键的基本命令(下) 生存周期
  3. python程序设计题怎么写_《Python语言程序设计基础》第1章程序练习题
  4. C++for_each| bind1st | ptr_fun | std::function的用法
  5. 使用mocha进行测试 区块链
  6. 一个DEMO让你彻底理解线程池
  7. OpenCL 第8课:旋转变换(2)
  8. 马桶怎么清洗才干净无异味?
  9. 帮助子女成功的十大路径
  10. 成为更优秀的开发人员:第二步-知道你的核心竞争力