前面我们对SOAP协议进行了介绍。我们了解,并且掌握了这部分的原理知识。了解到在一些重要的应用中,这个简单对象访问协议起到了很重要的作用。这里我们主要分析一下RPC以及SOAP协议应用等方面的内容。
SOAP-RPC
SOAP消息本质上是一种从发送方到接收方的单向传输,但是SOAP经常组合到实 现请求/响应机制中。要让RPC使用SOAP,必须遵循几条规则。首先,请求和响应 消息必须被编码成结构类型。对一个操作的每一个输入参数,都必须有一个同名 元素(或输入结构的成员)作为参数。对每一个输出参数,都必须有一个名称匹 配的元素(或输出结构的成员)。
基于RPC的观点,会省略一些更早一点显示的SOAP消息。只带有报文部分的SOAP请求与响应封套如下所示:
请求 DEF响应 22.50请求要调用GetLastTradePrice方法。注意响应定义了 GetLastTradePriceResponse操作。对附加响应到响应操作尾部的 一个常用的SOAP调用规则是:创建响应结构。这种输出结构包含一个名称为 price的元素,它返回方法调用的结果,假定为浮点型。
在SOAP封套中没有什么地方的数据类型是显式声明的,注意到这一点很重要,这样如果只查看SOAP消息,就不会知道符号类型或结果参数price(价格)的类 型。客户端应用程序一般通过“Section 5”编码定义数据类型,或通过与服务器 私下达成的协议来定义数据类型。在任何一种情况下,这些包含在SOAP消息中的 定义都不是显式的。
***,为了进行RPC,需要一种低级协议如HTTP。尽管SOAP1.0规范强制要求 使用HTTP作为传输协议,但SOAP1.1规范(及其姊妹规范“带有附件的SOAP消息” )允许使用FTP、SMTP、甚至(可能)原始的TCP/IP套接字。所有这些对SOAP通用的序列化和编码规则,也适用于RPC参数。
SOAP协议应用
Internet上某些地方的客户端应用程序使用Web服务。
Web服务(通过SOAP)显示对象方法。
对象方法访问Web上任意位置的远程数据。
对这些网络命题应用传递逻辑,我们可以为Web服务和SOAP协议下一个总的结论:
某些位置的客户端可以使Web上任意位置的数据。这就是所要证明的。
下面是更加详细一点的用例。
SOAP客户端使用UDDI注册来查找Web服务。不用直接操作WSDL,大多数情况下SOAP应用程序将硬连接到使用特定类型的端口和特定样式的绑定,并且它将 通过UDDI动态配置要调用的、与发现的Web服务匹配的服务地址。客户端应用程序创建SOAP消息,它是一个可执行想要的请求/响应操作的 XML文档。客户端把SOAP消息传送给监听SOAP请求的Web服务器上的JSP或ASP页面。 SOAP服务器解析SOAP包并在其领域调用合适的对象方法,在SOAP文档中包含的参数中传递。在SOAP服务器接收消息之前,中间处理节点可以执行SOAP报 头指示的特殊功能,可视情况确定是否执行这步操作。请求对象执行指示的功能,并返回数据给SOAP服务器,它把响应打包到SOAP封套中。服务器把SOAP封套包裹在要发送回请求机器的响应对象中,如 servlet或COM对象。客户端接收对象,剥离出SOAP封套并把响应文档发送给最初发出请求的程 序,完成请求/响应循环。
小结
SOAP协议是一种基于XML的协议,它用于在分布式环境中发送消息,并执行远程过 程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议), 就能使数据序列化。用SOAP来构建平台与语言中性的互操作系统是一个好的选择。总之,SOAP和 Web服务已为在XML上构建分布式应用程序基础结构所需的一切都考虑好了。通过解决COM和Java组件对象模型之间的冲突,SOAP把多个平台在访问数据时所出现的 不兼容性问题减至最少。先把这些讨论放在一边,SOAP是一种适用于所有类型的对象实体的理想的媒介 即使对于像Brad Pitt和Edward Norton之类的好莱坞电影角色也可用作 一种通信媒介。就像在电影中一样,期待着这种新技术带来震撼世界的效果。