使用WSDL发布WebService第二部分简单对象访问协议学习SOAP语法和使用SOAP发布WSDL.docx
- 文档编号:9040180
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:26
- 大小:25.33KB
使用WSDL发布WebService第二部分简单对象访问协议学习SOAP语法和使用SOAP发布WSDL.docx
《使用WSDL发布WebService第二部分简单对象访问协议学习SOAP语法和使用SOAP发布WSDL.docx》由会员分享,可在线阅读,更多相关《使用WSDL发布WebService第二部分简单对象访问协议学习SOAP语法和使用SOAP发布WSDL.docx(26页珍藏版)》请在冰豆网上搜索。
使用WSDL发布WebService第二部分简单对象访问协议学习SOAP语法和使用SOAP发布WSDL
使用WSDL发布WebService(第二部分)简单对象访问协议——学习SOAP语法和使用SOAP发布WSDL
简单对象访问协议(SOAP)提供了访问远程对象的方法。
这样的对象有JavaBean,EJB组件,COM和COM+对象等等。
这些对象使用不同的公司,可能在互联网上随处可见。
因此SOAP是一种在互联网上交换企业信息的机制。
在本文中,笔者将讨论SOAP通信的细节,对象如何使用SOAP显示其功能,如何调用SOAP对象以及如何在SOAP感知软件中交换信息。
他将演示如何将第一部分中的WSDL程序发布为SOAP服务,及其远程调用。
一.SOAP和WSDL
我在这个系列的第一部分介绍了WSDL。
WSDL描述WebService的接口。
WebService的拥有者将使用SOAP实现这些的接口。
因此WSDL服务就以SOAP服务的形式存在。
一旦WebService的用户拥有了WSDL文件,他就知道了接口的详细资料,就可以使用SOAP同WebService通信。
可以将你通过WSDL接口发布的WebService看作对象,它可以通过SOAP从互联网上远程访问。
既然服务都是对象,必然就会有一些属性跟每个服务及其行为相关。
SOAP消息是可能工作在HTTP上的XML文件。
二.使用SOAP的原因
B2B(business-to-business)和A2A(application-to-application)需要通信的企业双方的指示以交换其信息。
工作流的概念用于B2B,并贯穿于企业集成。
例如,某个企业调用供应商的服务以满足客户的需求,这就形成了一条垂直的供应链。
有的供应商也会拓展供应联调用其他企业的服务。
显然这类应用软件的交互性极其重要。
任一企业都只是实现SOAP通信的一端,而另一端由互联网上的其他人实现。
在未来的几年里,企业集成和交互能力将成为软件工程师和企业极具挑战性的任务。
平台依赖性也将是集成和交互能力达成的一大难题。
SOAP是至今为止最简单的实现企业集成和交互能力的机制。
三.SOAP架构
在初步了解了SOAP及其作用后,下面我将讨论它的架构以了解其内部的情况。
在图Figure1中,你可以看见下面的组件运用于典型的SOAP通信机制中:
1. SOAPClient
2. SOAPService
3. ActualService
Figure1.ComponentsofatypicalSOAPcommunicationarchitecture
下面讨论上面提及的各个实体在架构中的角色。
SOAPClient
SOAPClient是一个SOAP感知机器,它可以产生SOAP请求并通过HTTP将SOAP请求发送给SOAPServer。
SOAPClient是一种SOAP消息。
一般来说有两种SOAP消息:
SOAPClient发送给SOAPService的SOAP请求消息和SOAPService发送给SOAPClient的SOAP响应消息。
Listing1是一个典型SOAP请求消息,而Listing2则是一个典型SOAP响应消息。
Envelope xmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Body> getListOfModelsxmlns: m="urireference"> getListOfModels> Body>
Envelope>
SOAPServer
SOAPServer也是一个SOAP感知机器,它可以接受SOAPClient发来的请求并创建合适的响应。
加密的响应会发给发出请求的SOAPClient。
在SOAPServer内部有三个实体:
1. Servicemanager
2. Deployedservicelist
3. XMLtranslator
Servicemanager管理响应请求的服务。
在Listing1中的SOAP请求中,节点 getListOfModelsxmlns: m=”urn: MobilePhoneService”>包含了服务的名称。 Servicemanager会读出ServiceClient向要调用的服务的名称并向包含SOAPService中所有服务列表的Deployedservicelist查询是否有该项服务。 如果有Servicemanager就将SOAP请求发给XMLtranslator。 XMLtranslator将SOAP请求的XML结构转换成程序员用来实现ActualService的程序语言。 XMLtranslator还将ActualService返回的响应转回XML结构的SOAP响应。 Listing2就是一个SOAP响应的例子。 Envelope xmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Body> getListOfModelsResponsexmlns: m="urn: MobilePhoneservice"> getListOfModelsResponse> Body> Envelope> ActualService 在Figure1中标为ActualService的方框显示了ActualSrrvice的位置。 服务的实现可能是一个COM组件或是一个JavaBean组件。 XMLtranslator会把XML结构转换成合适的方法调用。 当XMLtranslator调用ActualSrrvice的方法时,这些方法会执行其功能并返回结果给XMLtranslator。 Figure1中连接XMLtranslator和ActualService的箭头的两端都在一个企业里,这意味着同一个组织控制着通信两端的接口。 与此相反的是SOAPClient和SOAPService穿越了企业的边界。 这就是SOAP的用途。 SOAP请求响应机制 SOAPClient传输SOAP消息给SOAPService时使用HTTP协议传输。 这称为SOAP绑定HTTP.当SOAPService收到消息时,他将消息传给ServiceManeger.SOAPService检查Deployedservicelist中是否有SOAP消息请求的服务。 如果没有该项服务,他将请求失败的响应发回给SOAPClient。 但如果有该项服务,就由XMLtranslator进行适合的语言转换,访问actualservice的实现。 服务的实现会处理请求并返回结果给XMLtranslator.XMLtranslator再将结果转换为SOAPClient理解的SOAP响应。 同样,HTTP绑定也用在SOAP响应的传输上。 SOAP绑定HTTP 当你将HTTP同SOAP帮定绑定或是在HTTP上操作SOAP时,你实际上在SOAP请求和响应上添加了HTTP头。 Listing1是典型的SOAP请求,而Listing3,4,5,6演示了在Listing1上添加了HTTP头的SOAP请求。 与此类似的是Listing7演示了在Listing2上添加了HTTP头的SOAP响应。 当你在HTTP上使用SOAP时,Content-Type字段必须为text/html.在Listing7中可以看到Listing3的细节。 一个使用HTTP的SOAP请求 你可以将SOAP联合在HTTP的请求方法POST上。 要发送一个SOAPHTTP请求,你必须在HTTP头上提供一个SOAPAction字段。 SOAPAction定义了SOAP请求的目的。 服务器(例如过滤HTTP上SOAP请求消息的防火墙)可以使用SOAPAction的值做决定。 HTTP客户端在发出SOAP请求时必须使用HTTP头的这个字段。 SOAPAction可以取的值如下所示: SOAPAction: ”URI-Reference” SOAPAction: ”filename” SOAPAction: ”” SOAPAction POST/VendorsHTTP/1.1 Host: Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn SOAPACtion: " xmlversion="1.0"? > Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/" > Body> getListOfModelsxmlns: m="urn: MobilePhoneservice"> getListOfModels> Body> Envelope> 图Listing3在SOAPAction中包含了下面的URI引用 这个SOAPAction说明了两件事: 一是SOAP发布的详细地址 POST/VendorsHTTP/1.1 Host: Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn SOAPAction: "MobilePhoneservice#getListOfModels" xmlversion="1.0"? > Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/" > Body> getListOfModelsxmlns: m="urn: MobilePhoneservice"> getListOfModels> Body> Envelope> 图Listing4在SOAPAction中包含了一个文件名 (MobilePhoneservice#getListOfModels)。 MobilePhoneservice文件必须放在主机URI下(www.M POST/VendorsHTTP/1.1 Host: Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn SOAPAction: "" xmlversion="1.0"? > Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/" > Body> getListOfModelsxmlns: m="urn: MobilePhoneservice"> getListOfModels> Body> Envelope> 图Listing5的SOAPAction中包含了一个控字符串(””)。 空字符串说明SOAP的目标跟主机URI相同(www.M POST/VendorsHTTP/1.1 Host: Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn SOAPAction: xmlversion="1.0"? > Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/" > Body> getListOfModelsxmlns: m="urn: MobilePhoneservice"> getListOfModels> Body> Envelope> 图Listing6的SOAPAction没有值。 这表明没有消息的目标的信息。 使用HTTP的SOAP响应 SOAP响应有两种类型: ● 成功的SOAP操作产生的SOAP结果。 ● 不成功的SOAP操作产生的SOAP错误消息。 HTTP/1.1Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Body> getListOfModelsResponsexmlns: m="URI-Reference"> getListOfModels> Body> 图Listing7就是一个从SOAP服务返回的有意义的结果。 图Listing8则是一个典型的SOAP错误消息。 SOAPHTTP响应在HTTP中添加了通信状态信息的HTTP状态码的语义。 当处理请求失败时,SOAPHTTP服务器必须发出一个包含带有SOAP错误元素的SOAP消息的HTTP500内部服务错误的响应。 HTTP/1.1500InternalServerError Content-Type: "text/xml";Charset="utf-8" Content-Length: nnnn Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Body> Fault> Fault> Body> Envelope> SOAP和e-mail HTTP并非是绑定SOAP消息的唯一解决方案。 你可以在HTTP步使用的地方使用其他的机制如SMTP进行SOAP绑定。 绑定SOAP到SMTP,你可以创建一个单向的通道。 两个单向的消息可以建立请求/响应通讯。 为了使用SMTP发送SOAP消息,你必须按照下面的步骤做: ● 使用SMTP头的MIME-Version字段 MIME-Version字段使用版本号区别不同版本的MIME(多用途网际邮件扩充协议).他允许邮件服务代理(如pop 服务)区别新老版本MIME产生的邮件消息。 图Listing9就是用了SMTP头的 MIME-Version字段。 TO: From: Reply-To: Date: SAT,2Feb200216: 00: 00 Message-Id: <4FAB345C8D93E93B7A6E9@> MIME-Version: 1.0 Content-Type: text/xml;charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE xmlversion="1.0"encoding="UTF-8"? > Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Body> echoStringxmlns: prnt=""> echoString> Body> Envelope> ● 使用SMTP头的Content-Type字段 Content-Type字段用来标明消息体重的数据类型。 ”text/xml”就是一个可以去的值。 图Listing9就使用了Content-Type字段。 ● 使用SMTP头的Content-Transfer-Encoding字段 Content-Transfer-Encoding字段用来说明传输编码的类型,就是说你想传输什么样的数据,是字符格式还是二进制格式的。 图Listing9使用了QUOTED-PRINTABLE编码就是ASCII字符集中可打印的字符。 它是以邮件传出代理不太可能修改结果字节的方式进行数据编码的 SOAP模式及其撰写 SOAP消息 SOAP消息就是一个XML文档,其中必须有一个包含可选SOAP头和必需的SOAP体的SOAPEnvelope。 SOAP模式的元素: ● Envelope ● Header ● Body ● Faule Envelope: Envelope是SOAP消息的根结点。 该节点在SOAP消息中是必须出现的。 Envelope使用的SOAP名称空间标识: http: //schemas.xmlsoap.org/soap/envelope/ 是必需的。 如果Envelope节点包含错误的名称空间就会产生一个Envelope名称空间版本的错误。 Listing10是一个空的Envelope节点。 你称之为空信以强调在”post”之前Envelope节点必须包含一封”信”。 SOAP模式中的信就是一个SOAP体而HTTPPOST则是传输机制。 Listing10 Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Envelope> Header SOAP头是可选的。 你可以跳过SOAP头直接在SOAP Envelope中封装一个SOAP体。 SOAP头提供了一个拓展SOAP消息功能的机制。 例如,在SOAP头中添加验证就是一个典型的拓展。 本例中就有一个将在底层传输的验证框架。 Listing11中可以看到SOAP中Header的实现。 Listing11 Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Header> Orderxmlns: m="someURI"SOAP-ENV: mustUnderstand="1"> Order> Header> Envelope> Body Body节点将会包含你想发送的消息。 这是一个必需的节点,而它的字节点通常属于一个用户自定义的名称空间中。 Listing12显示了一个含有用户自定义名称空间“u”的SOAP消息。 Body节点用来包含必需的信息。 Body节点是SOAP消息必需的,而且它必须是SOAPEnvelop节点的直接子节点。 他必须直接跟在SOAPHeader后面。 如果没有Header节点,则直接跟在Envelop节点后面。 Body可以包含字节点,字节点可以有其名称空间。 Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Header> Orderxmlns: m="someURI"SOAP-ENV: mustUnderstand="1"> Order> Header> Body> GetPricexmlns: u="someURI"> GetPrice> Body> Envelope> Fault 这个节点指示错误消息。 它必须在Body中出现而最多出现一次。 通常,Fault节点出现在SOAP响应中表明SOAP请求出错了。 Fault的子节点: ● faultcode(fault标识) ● faultstring(fault描述) ● faultactor(引发错误的原因) ● detail(错误的细节。 通常是相应遇SOAP请求的Body中名称空间的应用程序的错误细节。 ) Listing13是一个典型的fault消息。 Listing13 Envelopexmlns: SOAP-ENV="http: //schemas.xmlsoap.org/soap/envelope/"> Header> Orderxmlns: m="someURI"SOAP-ENV: mustUnderstand="1"> Order> Header> Body> <
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 WSDL 发布 WebService 第二 部分 简单 对象 访问 协议 学习 SOAP 语法
链接地址:https://www.bdocx.com/doc/9040180.html