当前位置: 首页 > 编程日记 > 正文

WSDL、SOAP、UDDI

纵观计算机和软件领域,我们不难了解为什么会产生Web服务。在因特网上有许多系统和平台,在这些系统和平台上又有更多的应用程序。说得更明白些就是,存在着许多技术,把客户端连接到服务器,这其中包括DCOM、CORBA和其它各种技术;而Web服务则是在HTTP、XML和SOAP这样的开放标准上形成的,它具有更新和更简单的连接类型。  

  我们可以把Web服务想象为通过因特网或企业内部网连接调用其方法的组件,或者把它想象为通过Web提供其接口的组件。Web服务建立在对开放标准XML广泛接受的基础上,Web服务使用XML序列化其客户端收发的数据。即使客户端和Web服务主机使用不同的操作系统,或者应用程序使用不同的程序语言开发,只要客户端程序可以解析XML,那么它就可以使用Web服务返回的数据。

  Web服务体系结构概述

  XML  Web服务体系结构最重要的优点之一就是允许在不同平台上使用不同编程语言以一种基于标准的技术开发程序,来与其它应用程序通讯。有两种使用Web服务的方法,允许访问内部系统功能,把它们向外部世界展示并且作为一个外部Web服务的客户端或者使用者。在这个模型中,Web服务可用来访问一个应用程序中任一层的应用功能。这样,因特网上的任何分布式系统就有可能被整合到一个用户定制的应用程序中。

  通常,一个Web服务被分为五个逻辑层:数据层(Data  Layer)、数据访问层(Data  Access  Layer)、业务层(Business  Layer)、业务面(Business  Facade)和监听者(Listener)。离客户端最近的是监听者,离客户端最远的是数据层。业务层更进一步被分为两个子层:业务逻辑(Business  logic)和业务面(Business  facade)。Web服务需要的任何物理数据都被保存在数据层。在数据层之上是数据访问层,数据访问层为业务层提供数据服务。数据访问层把业务逻辑从底层数据存储的改变中分离出来,这样就能保护数据的完整性。业务面提供一个简单接口,直接映射到Web服务提供的过程。

  业务面模块被用来提供一个到底层业务对象的可靠的接口,把客户端从底层业务逻辑的变化中分离出来。

  业务逻辑层提供业务面使用的服务。所有的业务逻辑都可以通过业务面在一个直接与数据访问层交互的简单Web服务中实现。Web服务客户应用程序与Web服务监听者交互,监听者负责接收带有请求服务的输入消息、解析这些消息,并把这些请求发送给业务面的相应方法。

  这种体系结构与Windows  DNA定义的n层应用程序体系结构非常相似。Web服务监听者相当于Windows  DNA应用程序的表现层。如果服务返回一个响应,那么监听者负责把来自业务面的响应封装到一条消息中,然后把它发回客户端。监听者还处理对Web服务协约和其他Web服务文档的请求。开发者可以添加一个Web服务监听者到表现层中,并且提供到现有业务面的访问权限,这样酒能够很容易地把一个Windows  DNA应用程序移植到Web服务中。虽然Web浏览器可以继续使用表现层,但是Web服务客户应用程序将与监听者交互。 

  Web服务堆栈

  使用HTTP通信协议,我们可以从因特网上的一个地方向另一个地方发送消息。通过网络发送的消息可以使用XML结构化,XML协议定义这条消息的格式和语义。SOAP(简单对象访问协议)是定义如何从不同环境中的对象调用函数。使用SOAP,就能够整合不同的操作系统、对象模型和编程语言,使简化整合不同种类的业务处理过程成为可能。

  HTTP、XML和SOAP可以看做是Web服务的核心层。这些层定义了Web服务之间交互的方法和途径。这三个协议已经被W3C(World  Wide  Web联盟)接受做为标准。

  WSDL协议(Web服务描述语言)描述如何与一个Web服务通讯。在WSDL定义中,允许不同类型的通讯(绑定)。它可以用来开发Web服务,同时也可以用来赚钱。为了实现这个目的,我们需要一个Web服务门户,我们可以在那里发布我们的Web服务,其他的人也能在那里找到它并使用它。这就需要使用UDDI(Universal  Description,  Discovery  and  Integration,统一描述、发现和整合规范)。

      
      (图1、Web  服务体系结构堆栈)

  Web服务技术通常可以分为三个关键组成部分:描述堆栈(Description  Stack)、发现堆栈(Discovery  Stack)和线堆栈(Wire  Stack)。描述堆栈处理描述Web服务的各种技术,以便促进B2B关系中的业务处理模型和工作流程结构的通用性。发现堆栈处理那些供目录、发现和审查服务使用的技术。线堆栈由为Web服务运行期引擎提供信息流的技术组成。

  Web服务的结构单元

  Web服务基于开放的因特网标准,它的结构单元是SOAP、WSDL和UDDI。

  SOAP

  SOAP是序列化调用位于远程系统上的服务所需信息的标准方法,这些信息可以使用一种远程系统能够读懂的格式通过网络发送到远程系统,而不必关心远程系统运行于何种平台或者使用何种语言编写。SOAP以XML格式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP可用于联合各种现有的网络协议和格式,包括HTTP、SMTP和MIME,并可被用于消息传递到RPC的各种系统。

  SOAP解决了通过防火墙传送往返于远程应用程序的消息的问题。除了通过某些预先设定的作为特定用途的端口,防火墙通常禁止通过其它端口进行远程通讯。这就出现了一个问题,大部分分布式协议不使用分配的端口,而是动态地选择端口。微软SOAP技术实现的解决方案是通过HTTP的80端口传送对远程进程的调用。这个远程调用使用XML定义消息请求或响应的格式,把调用附加到HTTP协议的顶部。这个技术的优点之一就是降低通过防火墙传送消息的复杂性。但是80端口通常还用来作为Web通信之用,所以可能会降低其效率。
SOAP可以用来解决因特网应用程序的交互性问题。你可以使用一种平台无关性方式在远程(或本地)服务器上访问对象和服务。现在的互联网世界由不同的操作系统、不同的防火墙、不同的产生远程过程调用的方法和平台组成。为了跨因特网交互,客户机和服务器都需要了解彼此的安全类型和信任、服务部署模式和实现细节以及平台语言。使用SOAP,这种平台特定性的混乱局面就会结束。基于已被业界广泛接受的HTTP标准和XML标准,SOAP也可与其竞争对象RPC技术连通,并提供用于任何操作系统、程序语言和平台的轻量级消息格式。

  在SOAP体系结构有四个主要的部分:

   SOAP信封(envelope),用于描述消息内容和处理方法。
 
   SOAP编码规则:定义了一个编码机制用于交换应用程序定义的数据类型的实例。

   SOAP  RPC表示,定义了一个用于表示远程过程调用和响应的约定。

   SOAP绑定,定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。

  简单的说,SOAP提供了使用完全独立于平台的访问服务、对象和服务器的技术。通过SOAP,你将能够查询服务、调用服务、与服务通讯并处理服务,而不用去关心远程系统的位置、所在的操作系统或平台到底是什么样的。

  SOAP本身提供了与Web服务交换信息的方法,但是它没有提供查找Web服务消息的方法。而且它还不提供查找Web服务或与之交涉的方法。

  WSDL

  Web服务描述语言(WSDL)和SOAP一起构成了Web服务的核心结构单元。WSDL基于XML格式,用来描述Web服务。它描述了Web服务可以执行的操作以及Web服务可以发送或接收的消息格式。WSDL文档可以看成是客户端和服务器之间的一个协约。使用WSDL工具,你可以自动处理这个过程,几乎不用手工编写代码就能够让应用程序整合新的服务。因此WSDL是Web服务体系结构的基础,因为它提供了一个通用语言,用来描述服务和整合这些服务的平台。

  虽然大部分WSDL文档使用RPC风格的要求/应答语句对,但是WSDL也支持单向的消息。WSDL支持四种SOAP消息操作:

   单向  (One-way):端点接收消息。  

   请求响应  (Request-response):端点接收消息,然后发送相关消息。  

   要求响应  (Solicit-response):端点发送消息,然后接收相关消息。  

   通知  (Notification):端点发送消息。

  UDDI

  UDDI(统一描述、发现和整合)建了一个平台独立、开放的框架,通过因特网来描述服务,发现业务,并且整合业务服务。它是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。

  通过使用UDDI的发现服务,企业可以单独注册那些希望被别的企业发现的自身提供的Web服务。企业可以通过UDDI商业注册中心的Web界面,或是使用实现了"UDDI  Programmer's  API标准"所描述的编程接口的工具,来将信息加入到UDDI的商业注册中心。UDDI商业注册中心在逻辑上是集中的,在物理上是分布式的,由多个根节点组成,相互之间按一定规则进行数据同步。当一个企业在UDDI商业注册中心的一个实例中实施注册后,其注册信息会被自动复制到其它UDDI根节点,于是就能被任何希望发现这些Web服务的人所发现。

转载于:https://www.cnblogs.com/tongdengquan/archive/2010/01/28/6090608.html

相关文章:

实战证明LINUX系统下密钥对验证的安全性

实战证明LINUX系统下密钥对验证的安全性 密钥对验证:要求提供匹配的密钥信息才能通过验证,首先在客户端创建一对密钥文件(公钥、私钥),后把公钥文件放到需要远程连接的服务器中。远程登录时,系统将使用私钥…

【怎样写代码】偷窥高手 -- 反射技术(四):深入窥视属性

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

百度android 测试平台,集成百度活体检测(Android、iOS)

更新记录1.1.0(2020-06-18)插件增加iOS版本1.0.2(2020-06-08)优化插件打包无法使用的问题插件调用方法添加sound字段,表示是否开启声音,true为开启,默认false查看更多平台兼容性AndroidiOS适用版本区间:4.4 - 9.0 支持CPU类型&…

ubuntukylin-14.04.2-desktop-amd64中python2.7版本安装机器学习库

为什么80%的码农都做不了架构师?>>> 本文永久地址:https://my.oschina.net/bysu/blog/1456737 1.如果需要设置代理才能上网,那么先设置代理。 摘自:http://www.cnblogs.com/foonsun/p/5781767.html ubuntu 全局代理&a…

【怎样写代码】偷窥高手 -- 反射技术(五):深入窥视方法

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

android 系统锁屏音乐播放器,Android实现音乐播放器锁屏页

本文实例为大家分享了Android音乐播放器锁屏页的具体代码,供大家参考,具体内容如下首页我们先看一下效果图下边来说一下实现逻辑,其主要思路就是新建一个activity使其覆盖在锁屏页上边。一、我们新建一个LockActivty,既然是四大组…

GridView标题行换行之我见 (转)

GridView标题行换行之我见 (转) 1、不换行:word-break:keep-all;word-wrap:normal2、换行:word-break:break-all;word-wrap:break-word以上的换行只支持英文,当标题中包含有中文时并不好用。3、如果标题中含有中文的,只能在GridVi…

【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

GIS+=地理信息+云计算技术——Spark集群部署

第一步:安装软件 Spark 1.5.4:wget http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgzHadoop 2.6.3:wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.3/hadoop-2.6.3.tar.gzscala :apt-get inst…

android上传图片崩溃,导致安卓手机死机的照片拍摄者表示这张照片是无意之举...

原标题:导致安卓手机死机的照片拍摄者表示这张照片是无意之举上周,我们报道了在一些安卓手机上将某张图片设置为壁纸会导致手机崩溃,并卡在一个开启和关闭显示屏的循环中,让用户无法进行锁屏。它影响了大多数Android手机&#xff…

判断页面元素存在与否

在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在。原因是对一个不存在的元素进行操作是不允许的。例如:document.getElementById("someID").innerText("hi");如果ID为"someID…

Java系列 – 用Java8新特性进行Java开发太爽了(续)

本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome-2/前言上周, 我们谈论了关于Java8的新特性有那些, 什么是函数式编程, 什么是Lambda表达式, 这周让我们继续谈论这些新特性.本周, 我们会聊一下什么是Stream API, 以及什么是Optiona…

【怎样写代码】偷窥高手 -- 反射技术(七):通过反射实例化对象

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

腾讯全力支持鸿蒙,腾讯宣布大力发展车联网,或与华为鸿蒙强强联合!

原标题:腾讯宣布大力发展车联网,或与华为鸿蒙强强联合!一场全球级别的科技风暴已然拉开序幕,互联网、通讯系统、云计算、智能家居、汽车……万物即将联为一体。按理来说这是互联网巨头大展拳脚的好机会,但身为国内互联…

CreateFileMapping

CreateFileMapping VB声明 Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal…

java file 操作之创建、删除文件及文件夹

本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹、java删除文件、java获取指定目录的全部文件、java判断指定路径是否为目录以及java搜索指定目录的全部内容等。请看下面实例。 创建文件File 的两个常量(File.separator、File.pathSeparat…

【怎样写代码】小技巧 -- .NET配置文件详解

如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

html树状结构怎么展开,纯css实现树形结构

纯css实现属性结构**css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收缩以及复选框效果还得配合js来实现。其实展开和收缩就是一个点击元素其子元素隐藏和显示的切换。**效果图html结构1级菜单2级菜单2级菜单3级菜单3级菜单1级菜单2级菜单…

.net获取ip地址

/// 获得客户端IP /// /// <returns></returns> private string getIp() { // 穿过代理服务器取远程用户真实IP地址 string Ip string.Empty; if (Request.ServerVariables["HTTP_VIA"] ! null) { …

Pascal 错误代码及含义

DOS 错误代码&#xff1a;1无效DoS功能号 2文件末找到 3路径未找到 4打开文件过多 5禁止文件存取 6无效文件句柄 12无效文件存取代码 15无效驱动器号 16不能删除当前日录 17不能跨驱动器改文件名 I/O错误 100磁盘读错误 101磁盘写错误 102文件变量未赋值 103文件未打开 104文件…

【怎样写代码】工厂三兄弟之工厂方法模式(一):问题案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

html5展示json数据库,显示数据在html5从数据库使用javascript和json

我想从MySQL数据库显示在html中的列表。要从MySQL获取数据我使用json和javascript。但它什么也没有显示&#xff01;显示数据在html5从数据库使用javascript和json我的HTML页面BackMy Lease当我从浏览器ID叫我的PHP文件is.It工作正常。session_start();include connection.php;…

Python学习笔记二:布尔表达式

1 #coding:utf-82 #布尔表达式的值只有两个&#xff0c;True和False3 x 12.44 y 12.35 printxy #符号用于判断两个数是否相等&#xff0c;这条语句的resultFalse6 x12.37 printx y #这条语句的result True8 printx !y #符号!用于判断两个数是否不相等&#xff0c;这条语句的re…

【怎样写代码】工厂三兄弟之工厂方法模式(二):解决方案 I

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

html中怎么隐藏复选框,隐藏复选框字段HTML

替代他们&#xff0c;我改变了你的标记&#xff0c;使用形式。 JavaScript是没有必要的(除非你需要支持IE8以上的浏览器)每一个复选框包括它的标签&#xff0c;它是透明的&#xff1a;所以当你点击你实际点击复选框的颜色。所选颜色的不同样式通过:checked伪类应用。标记GrayRe…

新公司研发能力低下,何去何从?

我是去年年底辞职的&#xff0c;到了现在的新公司&#xff0c;和我一起进公司的还有个09年毕业的研究生。到了公司不多久&#xff0c;我们就参加到了一个项目研发中&#xff0c;在研发的过程中&#xff0c;我们都发现公司的代码简直就是垃圾&#xff1a;一&#xff1a;代码的命…

Parentheses Balance (括号平衡)---栈

题目链接&#xff1a;https://vjudge.net/contest/171027#problem/E Yes的输出条件&#xff1a; 1. 空字符串 2.形如()[]; 3.形如([])或者[()] 分析&#xff1a; 1.设置一个变量flag&#xff0c;初始值为1 &#xff08;注意初始化的位置&#xff09;&#xff1b; 2.括号的左半边…

【怎样写代码】工厂三兄弟之工厂方法模式(三):解决方案 II

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

学以致提高学生操作计算机能力,【学以致用】提供学习平台,提升学生实际应用能力...

原标题&#xff1a;【学以致用】提供学习平台&#xff0c;提升学生实际应用能力我校教学服务部多年来一直承担学校电教设备的管理与维修任务&#xff0c;保障了全校教育教学及其他工作的顺利进行&#xff1b;同时&#xff0c;也成为学生学习实践的一个大平台。近日&#xff0c;…

兼容Silverlight4的实用的Silverlight可拖放工具类源代码

开发日常的Silverlight应用程序时&#xff0c;常常要对一个域多个控件实现可拖放的MOUSE操作&#xff0c;在Silverlight中实现拖放的功能其实非常简单&#xff0c;但是为了提高程序功能代码的可复用性&#xff0c;程序员常常喜欢把常用的代码封装成一个工具类&#xff0c;例如A…