使用SOAP的XML消息传递的简易流程图:
详细步骤如下:
(1)服务请求者的应用程序创建一条
SOAP
消息,将此信息和服务提供者的网址一起提供给
SOAP
基础结构(例如一个
SOAP
客户机运行时)。
SOAP
客户机运行时与一个底层网络协议(例如
HTTP)
交互,然后在网络上将
SOAP
消息发送出去。
注:尊重作者的劳动成果,如需转载文章或非个人学习使用,请注明文章出处,谢谢!
(2)网络基础结构将消息传送到服务提供者的
SOAP
运行时(例如一个
SOAP
服务器)。
SOAP
服务器将请求消息路由到服务提供者的
Web
服务。如果应用程序需要,
SOAP
运行时负责将
XML
消息转换为特定于编程语言的对象。这个转换由消息中可以找到的编码模式所控制。
(3)
Web
服务负责处理请求信息并生成一个响应。该响应也是一条
SOAP
消息。响应的
SOAP
消息被提供给
SOAP
运行时,其目的地是服务请求者。在
HTTP
上的同步请求/响应的情况中,联网协议的底层请求/响应本质用于实现消息传递的请求/响应。
SOAP
运行时将
SOAP
消息响应发送到网络上的服务请求者。
(4)响应消息由服务请求者节点上的联网基础结构接收。消息会经过整个
SOAP
基础结构;可能会将
XML
消息转换为目标编程语言中的对象。然后,响应消息被提供给应用程序
public interface Hello
{
public String sayHelloTo(String name);
}
假设有上述接口定义的服务存在
-
客户端在远程调用 sayHelloTo 方法时,提供一个名字,期望返回一个字符串
-
假设 Java RMI、CORBA、DCOM 都不存在,开发者必须负责将方法调用串行化,并把消息发给远程服务器
-
一个简单的方式是使用 XML
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>
<Hello>
<sayHelloTo>
<name>John</name>
</sayHelloTo>
</Hello>
</span>
用
XML
打包请求
-
将接口名作为根结点
-
方法和参数作为结点
将请求发送给服务器
-
不创建自己的TCP/IP 消息,利用 HTTP
-
将请求封装成 HTTP POST 请求格式发出
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0"?>
<Hello>
<sayHelloToResponse>
<message>Hello John, How are you?</message>
</sayHelloToResponse>
</Hello>
</span>
服务器接收到请求,解码
XML,
处理请求,然后以
XML
格式向客户发送响应
-
与请求比较,方法的结点名字变为请求的方法名后缀 Response
-
客户程序知道自己调用了哪个方法,根据方法名后缀 Response 寻找调用方法的返回值