简单对象访问协议(SOAP)提供对远程对象的访问。这些对象有的是简单的 JavaBeans 组件或者是企业 JavaBeans 组件和 COM/COM+ 对象等。这些对象驻留在不同企业内部并且可能存在于因特网的任何位置。因此,SOAP 通过因特网进行通信,它是一种在不同企业间交换信息的机制。在本文中,Bial 会详细的讨论 SOAP 通信,对象是怎样用 SOAP 发布其功能的,怎样调用 SOAP 对象,怎样在有 SOAP 意识的应用程序间交换信息。他还会展示第 1 部分中提到的 WSDL 应用程序的 SOAP 服务部署,以及远程服务器对它的调用。
SOAP 和 WSDL
我在本系列文章的第 1 部分介绍了 WSDL。WSDL 描述了 Web 服务的接口。Web 服务所有者将用 SOAP 来实现他们的接口。因此,WSDL 服务实际上作为 SOAP 服务一样存在。一旦 Web 服务用户拥有 WSDL 文件,他或者她就知晓接口的细节。他或者她就会用 SOAP 来与 Web 服务通信。
SOAP 和 WSDL
我在本系列文章的第 1 部分介绍了 WSDL。WSDL 描述了 Web 服务的接口。Web 服务所有者将用 SOAP 来实现他们的接口。因此,WSDL 服务实际上作为 SOAP 服务一样存在。一旦 Web 服务用户拥有 WSDL 文件,他或者她就知晓接口的细节。他或者她就会用 SOAP 来与 Web 服务通信。
可以把 Web webservice实现服务考虑为对象,可以通过 WSDL 接口公开并且使用 SOAP 通过因特网远程访问。既然服务是对象,那么肯定有每种服务的相关属性和每种服务调用的行为。SOAP 消息是
XML 文档,可通过 HTTP 工作。
为什么用 SOAP?
B2B(Business-to-business)和 A2A(application-to-application )需求表明企业之间为交换信息而相互通信。这种概念被用在 B2B、工作流和跨企业集成中。例如,设想一条垂直供应链,在链上一家企业为了满足它的客户需求而需要调用其提供者的服务。而一些提供者需要沿供应链进一步下行来调用其它企业的服务。
B2B(Business-to-business)和 A2A(application-to-application )需求表明企业之间为交换信息而相互通信。这种概念被用在 B2B、工作流和跨企业集成中。例如,设想一条垂直供应链,在链上一家企业为了满足它的客户需求而需要调用其提供者的服务。而一些提供者需要沿供应链进一步下行来调用其它企业的服务。
很明显,在此应用程序中互操作性是最为重要的。任何单个企业只能实现 SOAP 通信通道的一端。另一端将是因特网上任何地方的实体。
在最近几年里,企业之间的集成和互操作性已经成为软件工程师和企业的一个挑战性任务。平台相关性也成为取得集成和互操作性的一个大问题。SOAP 依然是在企业间取得集成和互操作性最简单的机制。
SOAP 体系结构
有了对 SOAP 和它的用途的基本理解,我现在就展开对其体系结构的讨论以了解一些深层知识。请参阅图 1,在此图里面您可以识别典型 SOAP 通信体系结构中的一些组件:
SOAP 客户机
SOAP 服务器
实际服务
SOAP 服务器
实际服务
图 1. 一个典型 SOAP 通信体系结构的组件
让我解释上面所提到的每个实体的体系结构角。
下面的讨论参照图 1。
下面的讨论参照图 1。
SOAP 客户机
SOAP 客户机是一台有 SOAP 机制的机器,它可以产生 SOAP 请求并通过 HTTP 发送到服务器。一条 SOAP 请求是一种类型的 SOAP 消息,通常只有两种类型的 SOAP 消息:一条 SOAP 请求就是一台 SOAP 客户机发送给 SOAP 服务器的内容,一条 SOAP 响应就是 SOAP 服务器对 SOAP 客户机响应的内容。清单 1 是典型的 SOAP 请求,请参阅清单 2 来回顾 SOAP 响应。
SOAP 客户机是一台有 SOAP 机制的机器,它可以产生 SOAP 请求并通过 HTTP 发送到服务器。一条 SOAP 请求是一种类型的 SOAP 消息,通常只有两种类型的 SOAP 消息:一条 SOAP 请求就是一台 SOAP 客户机发送给 SOAP 服务器的内容,一条 SOAP 响应就是 SOAP 服务器对 SOAP 客户机响应的内容。清单 1 是典型的 SOAP 请求,请参阅清单 2 来回顾 SOAP 响应。
清单 1:一条简单的 SOAP 请求
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http:///soap/envelope/" >
<SOAP-ENV:Body>
<m:getListOfModels xmlns:m = "uri reference" >
</m:getListOfModels>
</SOAP-ENV:Body>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http:///soap/envelope/" >
<SOAP-ENV:Body>
<m:getListOfModels xmlns:m = "uri reference" >
</m:getListOfModels>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP 服务器
SOAP 服务器也是一台有 SOAP 机制的机器,能够接收来自 SOAP 客户机的请求,并对之作出适当的响应。这些编过码的响应会返回发出请求的 SOAP 客户机。在 SOAP 服务器内部有三个实体:
SOAP 服务器也是一台有 SOAP 机制的机器,能够接收来自 SOAP 客户机的请求,并对之作出适当的响应。这些编过码的响应会返回发出请求的 SOAP 客户机。在 SOAP 服务器内部有三个实体:
服务管理器
被部署服务的列表
XML 转换程序
被部署服务的列表
XML 转换程序
服务管理器负责根据请求管理服务。请参阅清单 1 的服务请求,在这里元素<m:getListOfModels xmlns:m="urn:MobilePhoneservice" >包含了服务的名称。服务管理器会读取 SOAP 客户机想调用的 SOAP 服务的名称并检查所需的服务实际上是否驻留于这台
SOAP 服务器上。此后,它会查询被部署服务的列表(SOAP 服务器所托管的所有服务的列表)。若存在,服务管理器将把 SOAP 请求传送给 XML 转换程序。XML 转换程序就负责将 SOAP 请求的 XML 结构转换成程序员用来实现实际服务的编程语言(例如,Java 编程语言)的结构。还要负责将来自实际服务的响应转换回 SOAP 响应的 XML 结构。请参阅清单 2 获得 SOAP 响应的说明。
清单 2:一条简单的 SOAP 响应
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http:///soap/envelope/">
<SOAP-ENV:Body>
<m:getListOfModelsResponse xmlns:m="urn:MobilePhoneservice">
<Model>M1</Model>
<Model>M2</Model>
<Model>M3</Model>
</m:getPriceResponse>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http:///soap/envelope/">
<SOAP-ENV:Body>
<m:getListOfModelsResponse xmlns:m="urn:MobilePhoneservice">
<Model>M1</Model>
<Model>M2</Model>
<Model>M3</Model>
</m:getPriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</SOAP-ENV:Envelope>
实际服务
图 1 中标有 actual service 的框就是实际服务驻留的位置。服务实现可以是:例如,COM 组件或 JavaBeans 组件的形式。XML 转换程序负责将 XML 结构转换成合适的方法调用。当 XML 转换程序调用了实际服务实现的某个方法时,这个方法就会完成它的工作并且将结果信息返回 XML 转换程序。
图 1 中标有 actual service 的框就是实际服务驻留的位置。服务实现可以是:例如,COM 组件或 JavaBeans 组件的形式。XML 转换程序负责将 XML 结构转换成合适的方法调用。当 XML 转换程序调用了实际服务实现的某个方法时,这个方法就会完成它的工作并且将结果信息返回 XML 转换程序。
请看一看图 1 中连接 XML translator 和 actual service 的箭头。箭头的两端同在一个企业内,这意味着同一个组织控制着通信两端的接口。与穿过企业边界的在 SOAP 客户机和 SOAP 服务器之间的箭头相比,这正是 SOAP 的目的所在。
SOAP 请求响应机制
当 SOAP 客户机向 SOAP 服务器发送 SOAP 消息时,用 HTTP 协议传输。这就叫做 SOAP
当 SOAP 客户机向 SOAP 服务器发送 SOAP 消息时,用 HTTP 协议传输。这就叫做 SOAP
与 HTTP 绑定。当 SOAP 服务器收到消息时,将消息交给服务管理器。服务管理器检查被部署服务的列表,查在 SOAP 消息中所需的服务。若没有查到所请求的服务,它将请求失败返回给 SOAP 客户机。但是若此项服务可以提供,控制权由服务管理器转移给 XML 转换程序(转换程序完成合适语言的转换并访问实际服务实现)。服务实现会处理请求并将结果返回给 XML 转换程序。XML 转换程序将结果转换成 SOAP 客户机能够理解的 SOAP 响应(XML 文档)。然后又一次用 HTTP 绑定来传输 SOAP 响应。
现在让我们看一下 SOAP 与 HTTP 的绑定细节。
现在让我们看一下 SOAP 与 HTTP 的绑定细节。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论