




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2008-2010 by Li Weigang. All rights reserved.Web服务实用技术服务实用技术主讲:李伟刚西北工业大学软件与微电子学院2008-2010 by Li Weigang. All rights reserved.第三章第三章 SOAP2008-2010 by Li Weigang. All rights reserved.主要内容主要内容lSOAP概述lSOAP消息结构lSOAP编码lSOAP消息交换lSOAP处理技术2008-2010 by Li Weigang. All rights reserved.第一节第一节 SOAP概述概述2008-2010
2、by Li Weigang. All rights reserved.lSOAP是一个独立于任何特定传输协议的XML消息协议l是复杂的分布式对象通信技术的轻量级替代物l源自 BizTalk (Microsoft/UserLand/DevelopMentor )lW3C的标准lBased on XMLSOAP2008-2010 by Li Weigang. All rights reserved.lSOAP最早由Dave Winner、Don Box和Bod Atkinson提出。l在1997年,Microsoft开始考虑基于XML的分布式计算,其目标是使应用程序能够使用HTTP上层的远程过程调
3、用(RPC)相互通信。DevelopMentor和Userland加入到了讨论。l在1998年初,SOAP名字就已经被确定。Userland在1998年发布了一个XML-RPC规范。l1999年9月SOAP0.9提交IETF(Internet工程任务组)。l2000年5月8日,SOAP1.1作为Note提交W3C。IBM发布Java SOAP实现,并捐给开放源代码组织Apache XML Project。Sun公司将Web服务集成到J2EE中。l2000年9月13日,W3C组建了XML协议工作组,专门负责设计XML协议,以便成为基于XML分布式计算的核心。这个工作组将SOAP1.1作为基础,并
4、于2001年7月9日提交了第一份工作组草案SOAP1.2。2003年6月24日SOAP1.2成为W3C推荐标准。2007年4月27日W3C发布SOAP1.2推荐标准第二版。 SOAP发展史发展史2008-2010 by Li Weigang. All rights reserved.lSOAP 为在一个松散的、分布的环境中使用XML对等地交换结构化和类型化信息提供了一个简单且轻量级的机制。l支持应用程序与应用程序之间的通信。l应用于B2B的通信以及企业应用集成。l以独立于各种编程语言或平台的方式来构造消息、处理消息,从而使用不同编程语言编写的程序之间具有互操作性,并能够在不同的操作系统上运行。
5、l通过对模块中特定格式编码的数据的重编码机制来表示应用语义。SOAP-What?2008-2010 by Li Weigang. All rights reserved.SOAP-What?2008-2010 by Li Weigang. All rights reserved.SOAP-What?SOAPNetwork ProtocolIntermediator2008-2010 by Li Weigang. All rights reserved.l使用RPC进行通信l需对服务接口达成一致l需对通信协议达成一致l使用ORB服务l可以使用Internet,但是需要更改安全设置SOAP-Wha
6、t?2008-2010 by Li Weigang. All rights reserved.l使用XML消息,信封可封装任意内容和附件l不需要特殊的网络设置l用XML描述服务(即WSDL)l用XML描述消息SOAP-What?2008-2010 by Li Weigang. All rights reserved.l定义通信单元的构成:一个SOAP封套封装了所有其他的信息。一个消息可以有一个消息体,消息体中可以包含任何XML格式数据。l错误处理机制:标识错误源和导致错误的原因,并允许错误诊断信息在共享者和交互者之间传递。l可扩展机制:使用XML Schema和名字空间技术,灵活扩展元素。l灵
7、活的数据表示机制:允许交换已经以某种格式序列化的数据,同时也提供了以XML格式表示诸如编程语言数据类型这样的抽象数据结构的规则。l表示远程过程调用(RPC)和作为响应的SOAP消息的约定,并且便于映射为过程式编程语言结构。l支持以文档为中心的方法。l将SOAP消息绑定到HTTP上,因为HTTP是Internet上最常用的通信协议。SOAP的功能的功能2008-2010 by Li Weigang. All rights reserved.第二节第二节 SOAP消息结构消息结构2008-2010 by Li Weigang. All rights reserved.l基于XML的协议,由四部分组
8、成: 信封(Envelope):作为描述消息中的内容以及如何处理消息的信息框架 编码规则(Encoding Rules):用于表示应用程序需要使用的数据类型的实例 绑定(Binding):定义底层通信协议,进行消息交换RPC:远程过程调用和返回的约定 SOAP的内容的内容2008-2010 by Li Weigang. All rights reserved.SOAP消息处理模型消息处理模型2008-2010 by Li Weigang. All rights reserved.SOAP消息结构消息结构lEnvelope containsHeaderBodylHeader is optiona
9、lOut-of-band information (带外信息) such aslAuthentication informationlMessage routeslLogginglTransaction flowlBody contains XML body of RPC callSOAP EnvelopeSOAP HeaderHeader BlockHeader Block. . . SOAP BodyBody BlockBody Block. . . 2008-2010 by Li Weigang. All rights reserved.SOAP消息剖析消息剖析注:是省略写法2008-2
10、010 by Li Weigang. All rights reserved.SOAP消息例子消息例子SOAP envelopeapp-specific message IBM A SOAP Request Message2008-2010 by Li Weigang. All rights reserved.SOAP消息例子消息例子A SOAP Request Messageapp-specific messagemessage namespaceSOAP Envelope NamespaceSOAP envelope2008-2010 by Li Weigang. All rights r
11、eserved.SOAP消息例子消息例子A SOAP Respond MessageSOAP envelopeapp-specific messageResult returned in Body2008-2010 by Li Weigang. All rights reserved.SOAP信封信封2008-2010 by Li Weigang. All rights reserved.lencodingStyle属性: encodingStyle属性信息项指出了对SOAP消息部分内容进行序列化的编码规则 lSOAP的全局encodingStyle属性被用于指明在SOAP消息中使用哪种编码规
12、则。lencodingStyle属性信息项可以在下述地方出现,其作用范围包括该元素的内容和所有其子元素中未使用该属性的所有子元素:SOAP头块SOAP体元素信息项的子元素信息项如果该子元素不是SOAP故障元素信息项SOAP Detail元素信息项的子元素信息项上述三者的任意子元素encodingStyle属性信息项不能出现在除上述SOAP信息集之外的其它任何元素中SOAP 主要属性主要属性 2008-2010 by Li Weigang. All rights reserved.lSOAP提供了一个可伸缩的机制用于在分散的模块化的环境下扩展SOAP消息,而通讯双方并不需要有预先的约定知识。典型
13、的扩展例子可以是实现一些诸如认证、事务管理以及支付的Header条目lHeader元素应当被编码为SOAP Envelope XML文档的第一直接子元素。Header的所有直接子元素都被称为Header条目SOAP Header 2008-2010 by Li Weigang. All rights reserved.2008-2010 by Li Weigang. All rights reserved.lHeader条目的编码规则包括:一个SOAP Header条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间URI和局部名来组成SOAP Header元素的所有直接子元
14、素都必须是完整修饰的lencodingStyle属性可以用于指明Header条目的编码风格lrole属性和SOAP mustUnderstand属性可以用于指明由哪个SOAP结点来处理条目以及如何处理条目SOAP Header 2008-2010 by Li Weigang. All rights reserved.l描述安全凭证l事务IDl路由l调试信息l支付令牌l安全lSOAP Header 2008-2010 by Li Weigang. All rights reserved.lSOAP消息从生成者到达最终接受者,将潜在地沿着消息路径经过一系列的SOAP中间结点。SOAP中间结点是一个
15、能够接受和转发SOAP消息的应用程序。所有的中间结点都如同最终接受者一样由一个URI来标识 lrole属性信息项的类型是xs:anyURI。role属性信息项的值是一个URI,该URI标识了该头块期望SOAP结点担任的角色l当一个节点接收到一个SOAP消息时,它要分析文件头,以确定哪些代码块是由该节点支持的角色role属性属性 2008-2010 by Li Weigang. All rights reserved.l除了表中所定义的SOAP角色的名字之外,具体的SOAP应用可根据自身需要定义其它角色role属性属性 2008-2010 by Li Weigang. All rights re
16、served.role属性属性 2008-2010 by Li Weigang. All rights reserved.lmustUnderstand全局属性用于指明一个Header条目是强制的还是可选的要求接收者处理lHeader条目的接收结点由SOAP role属性来定义mustUnderstand属性的值可为“false”或“true”。若没有使用SOAP mustUnderstand属性,则在语义上等价于mustUderstand属性出现同时取值为“false” l若Header条目带有值为“true”的mustUnderstand属性,则该Header条目的接收结点要么必须遵循语义
17、并正确地处理这些语义,要么必须宣称处理消息失败lmustUnderstand属性是为了考虑健壮地升级而设置的。所有用值为“true”的SOAP mustUnderstand属性来标记的元素必须被认为是可以影响该元素的上级元素或同级元素的语义mustUnderstand属性属性 2008-2010 by Li Weigang. All rights reserved.lSOAP relay属性信息项用于指出,如果定位于SOAP接收者的SOAP头块没有被处理,那么是否必须转发该头块lrelay属性信息项的类型为xs:booleanl省略该属性,在语义上等价于包含值为”false”的relay属性l
18、如果生成SOAP relay属性信息项,SOAP发送者应该使用规范的形式表示属性值“true”。SOAP接收者必须接收该属性值任何有效的词法表示 l生成SOAP消息的SOAP发送者应该只在SOAP头块中使用relay属性信息项SOAP relay属性属性2008-2010 by Li Weigang. All rights reserved.lSOAP Body元素提供一个简单的用于与消息的最终接收者交换强制信息的机制。而Body元素的典型应用包含序列的RPC调用和错误报告lBody元素在编码上作为SOAP Envelope元素的一个直接子元素。如果包含Header元素,则Body元素必须直接
19、跟随Header元素,否则Body元素必须是Envelope元素的第一直接子元素l所有Body元素的直接子元素被称为SOAP Body条目,同时每一个Body条目都应当编码为SOAP Body元素里的一个独立元素SOAP Body 2008-2010 by Li Weigang. All rights reserved.lBody条目的编码规则:一个Body条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间URI和局部名来组成。SOAP Body元素的直接子元素可以是命名空间修饰的SOAP encodingStyle属性可以被用来表明Body条目中使用的编码规则SOAP定义
20、了一个Body条目,用于报告错误的Fault条目SOAP Body 2008-2010 by Li Weigang. All rights reserved.lSOAP Fault元素是用于在SOAP消息中传输错误或状态信息。如果SOAP消息需要包含SOAP Fault元素的话,它必须作为一个Body条目出现,同时在Body元素内它必须至多出现一次lSOAP Fault元素定义了如下子元素:1faultcode元素为那些要提供一个算法上的机制来标识错误的软件之用。faultcode必须在SOAP Fault元素中出现。SOAP定义了一个很小的SOAP错误代码的集合用于覆盖基本的SOAP错误。2
21、faultstring元素是为那些错误代码提供一个人可以读懂的错误解释,它不是为程序处理而设,提供一些解释该错误种类的信息。3faultactor元素指明SOAP消息路径中是谁引起了该错误的发生。faultactor属性的值是一个标识该源的一个URI。不作为SOAP消息最终接收者的应用程序必须在SOAP Fault元素中包含faultactor元素。而消息的最终接收者可以使用faultactor元素来明确地指明是它生成了该错误。4detail元素是用于传输与SOAP Body元素相关的应用程序特定的错误信息。如果Body元素中的内容不能被成功地处理的时候,它必须出现。它不能被用于传输属于Hea
22、der条目的错误信息。SOAP Fault 2008-2010 by Li Weigang. All rights reserved.l若SOAP Fault元素中不出现detail元素,则表明其中的错误与Body元素的处理无关。这可以用于区分在错误情况下Body元素是否被SOAP的最终接受者处理过。ldetail元素的所有直接子元素都被称为detail条目,同时每个detail条目都作为detail元素中的一个独立的元素进行编码。ldetail条目的编码规则如下:1一个detail条目由一个完整修饰的元素名来标识。detail元素的直接子元素可以是命名空间修饰的。2SOAP encoding
23、Style属性可以被用来表明detail条目中使用的编码规则。SOAP Fault 2008-2010 by Li Weigang. All rights reserved.第三节第三节 SOAP编码编码2008-2010 by Li Weigang. All rights reserved.l简单类型: SOAP采用了在“XML Schema Part 2: Datatypes”的“Build-in datatypes”节中定义的所有类型,包括值和词汇空间(lexical spaces)字符串:“string”数据类型在“XML Schema Part 2: Datatypes”中被定义。枚
24、举:“XML Schema Part 2: Datatypes”规范定义了一种称为“玫举(enumeration)”的机制。字节数组:一个Byte数组可以编码为单引用或多引用值。对一个不透明的Byte数组的推荐表示是使用在XML Schema规范中定义的“base64”编码方式。多态存取标识:多态地访问多个类型的值,在运行时刻每个类型都是可使用的。一个多态存取标识实例必须包含一个“xsi:type”属性以描述类型的实际值。 SOAP 编码编码2008-2010 by Li Weigang. All rights reserved.l复合类型:SOAP依照在程序语言中常常看见的以下结构模式来定义
25、复合类型:“struct”是一个复合类型值,其成员的存取标识名是相互区别的唯一标志,应彼此各不相同。“array”是一个复合类型值,其成员的顺序位置是相互区别的唯一标志。SOAP 编码编码2008-2010 by Li Weigang. All rights reserved.l两种描述数据类型实例的语法lAnonymous accessor:36lAnonymous because its name is its type rather than a meaningful id for the valuelNamed accessor:36SOAP 数据类型数据类型2008-2010 by
26、Li Weigang. All rights a3 = 1, 2, 3;b = Add(ina); 1 2 3 SOAP 数据类型:数据类型:Arrays2008-2010 by Li Weigang. All rights reserved.第四节第四节 SOAP消息交换消息交换2008-2010 by Li Weigang. All rights reserved.lBy value : Add(in int a, in int b);lBy reference : Square(in, out int &a);348传值和传引用传值和传引用2008-20
27、10 by Li Weigang. All rights reserved.lSOAP-RPC: SOAP的一个设计目标就是要利用XML的可扩展性和可伸缩性来包装和交换RPC调用。l为实施一个方法调用,需要以下信息:目标SOAP结点的URI方法名可选的方法或过程的特征方法或过程的参数可选的头数据lSOAP依赖协议绑定来提供传送URI的机制SOAP消息交换模式消息交换模式 2008-2010 by Li Weigang. All rights reserved.lRPC调用和响应都是在SOAP Body元素中传送,使用如下表示方式:一个方法调用被建模成一个结构struct。该方法调用显示为一个简
28、单结构struct,包含每个in或in/out参数的存取标识。该结构的名和类型可使用过程或方法的名来标识。每个in或in/out参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。他们的次序也是按照原来RPC中的次序。一个方法响应被建模成一个结构struct。RPC和和SOAP Body2008-2010 by Li Weigang. All rights reserved. Computer SOAP 请求消息请求消息2008-2010 by Li Weigang. All rights reserved.l该方法响应显示为一个简单结构struct,包含每个out或i
29、n/out参数的存取标识。而第一个存取标识是返回值,而随后则是按照原来次序的返回参数。l每个out或in/out参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。返回值的存取标识名并没有多少语义。同样的,结构的名也并没有多少语义。当然,无论如何,在添加了“Response”字串的方法名后,要有一个约定来命名它。l方法调用出错应使用SOAP Fault元素来编码。如果一个绑定协议对于错误表达还有额外规则,那么这些规则都应当被遵守。l方法和响应的结构可以使用规则来编码,也可以使用在encodingStyle属性中描述的其他编码。l应用程序可以处理漏写参数的请求不过也可以返
30、回一个错误。l因为在响应中若包含“result”则表明成功,若包含“fault”则表明失败,所以如果方法响应中同时包含了“result”和“fault”则是错误的。RPC和和SOAP Body2008-2010 by Li Weigang. All rights reserved. 8000.00 SOAP 响应消息响应消息2008-2010 by Li Weigang. All rights reserved.lRPC (Remote Proceduce Call): SOAP Request Message 的SOAP Body 中, 第一个 sub-element 必须与operatio
31、n 同名。 RPC和和SOAP Body2008-2010 by Li Weigang. All rights reserved.lDocument: 用于 messaging oriented document exchange. 对于document-oriented Service 或 messaging-oriented Service, 不强调“operation” ,允许SOAP Body 可以直接带message part, 不用跟一个 operation element . . 注:以目前來说, 不管是.NET 或 JAVA, 并沒有将这两种 operation 的实现方式明显
32、区分,不管是 RPC Operation 亦或是 Document Operation, 后端都是以一个 Method 來实现RPC和和SOAP Body2008-2010 by Li Weigang. All rights reserved.l1rpc/encoded l2rpc/literal l3document/encoded l4document/literal 消息模式消息模式2008-2010 by Li Weigang. All rights reserved.public class myServices public void myMethod (int x) return
33、; 服务服务2008-2010 by Li Weigang. All rights reserved.lSOAP文档内容 5 rpc/encoded样式样式2008-2010 by Li Weigang. All rights reserved. 5 rpc/literal样式样式2008-2010 by Li Weigang. All rights reserved. 5 document /encoded2008-2010 by Li Weigang. All rights reserved. 5 document /literal2008-2010 by Li Weigang. All
34、rights reserved. 5 document / literal-wrap2008-2010 by Li Weigang. All rights reserved.lIts just that there are two ways to structure a SOAP message. lIn the early versions of SOAP, SOAP was designed to support only RPC style. When using RPC style, the contents of the SOAP Body must conform to a str
35、ucture that indicates the method name and contains a set of parameters. lBy the time the SOAP 1.0 spec was published, it was expanded to support both RPCs and unstructured messages (document). When using Document style, you can structure the contents of the SOAP Body any way you like.消息模式消息模式2008-20
36、10 by Li Weigang. All rights reserved.l虽然SOAP可以和多种HTTP请求方法联合使用,但这里的绑定只定义了SOAP是如何在HTTP Post请求中传输的。1HTTP Header中的SOAPAction字段:SOAPAction HTTP请求头字段(header field)可以用于指示SOAP HTTP请求的目的。它的值是一个标识该目的的URI。2SOAP HTTP响应:在HTTP之上的SOAP遵从用于在HTTP中表示通讯状态的HTTP状态代码的语义。例如,2xx状态代码表明这是客户端包含SOAP构件的请求被成功的接收、理解和接受等等。3当处理请求的时候发生SOAP错误的时候,SOAP HTTP服务器必须发出一个HTTP 500 “Internal Server Error”响应同时在包含于该响应的SOAP消息中应包含一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业商务写字楼租赁合同示范文本
- 高铁餐饮考试题及答案
- 复杂日语考试题目及答案
- 放射职称考试题目及答案
- 2025房屋中介买卖合同模板
- 法学电网考试题目及答案
- 中国五氟化磷项目创业计划书
- 2025信托资金借款合同书格式范本
- 电诈防范考试题及答案
- 中国硼酸酯偶联剂项目商业计划书
- 2025浙江湖州市产业投资发展集团下属市飞英融资租赁有限公司招聘笔试历年参考题库附带答案详解
- 酒驾复议申请书
- 软件项目开发团队管理方案
- 教师招聘培训课件
- 2025年中国低氘水行业市场全景分析及前景机遇研判报告
- dj打碟培训课件
- 医院药师培训课件
- 2025年济南市中考语文试题卷(含答案)
- 第2节 分式的运算教学设计-2025-2026学年初中数学沪教版上海七年级第一学期-沪教版上海2012
- 监狱结构化面试题库及答案
- 商场对商户安全培训课件
评论
0/150
提交评论