11.1 序言
虽然电子商务的狂热在最近似乎有减温的现象,让许多人能够回归到正常的步调之中,不过随着电子商务而发展的软件技术并没有稍停脚步,反而更加蓬勃发展。因为由这些技术创造的应用早已成为许多人生活的一部份,甚至是开启未来趋势的基石。在目前最热门且最被看好的技术便是所谓的Web Service了,那么什么是Web Service呢?
简单的说,Web Service是一种想把全世界的Internet/Intranet变成一个虚拟计算环境的观念和技术。在由Web Service组成的虚拟环境中使用者可以任何的客户端软件,例如浏览器,一般的Window或是Java应用程序或是电子行动设备等,来调用Web Service提供的服务。而Web Service本身则可以由任何的技术编写,例如开发者可以使用Delphi,Java,C/C++或是C#等的语言和工具来开发。
Web Service是建立在开放和标准的规格之上,允许异质的客户端调用以使用它提供的服务。因此各种异质的客户端必须使用一种共通的沟通标准才能够顺利的和由各种不同技术编写的Web Service互通。目前最流行而且最具潜力的沟通标准当属SOAP了。
SOAP (Simple Object Access Protocol)是由Don Box起草,并且获得IBM,Microsoft,Lotus和UserLand等大型公司支持而成为W3C标准之一的通讯协议规格。从SOAP的名称中我们便可以知道它是让客户端调用远程对象服务的一种机制。SOAP以XML标准封装调用远程服务的格式,有别于其它分布式对象模型调用特定的调用格式,例如CORBA的GIOP以及DCOM的ORPC。由于SOAP以XML封装调用格式,因此它可以使用任何的实体传输层来传送,例如HTTP,TCP或是SMTP等。也许让我们使用一个简单的概例来说明会让各位更容易的了解。
假设现在我在Linux平台上以Java语言编写了一个Web Service,这个Web Service提供了一个服务GetSystemTime。这个服务接受一个使用者名称和一个密码,如果成功的登录之后,这个服务便会回传Linux平台目前的系统时间。那么我可以使用Delphi以SOAP的标准封装使用者名称和密码来调用这个在Linux平台上的GetSystemTime服务。
目前WebService 使用它来当作数据交换的标准,本文不尝试完整解释SOAP! 如果你想完整的了解SOAP 的话,请在附录或相应的参考书中查找相关的内容,这里我只简单的列出几样你应该要知道的部份。
SOAP需要一个通讯协议来传输讯息,目前的SOAP 1.0,1.1 都偏向于使用HTTP做为通讯协议,而新的SOAP 1.2版在信息包头部包含了一些信息包容数据,这样我们也可以更加容易的使用它进行相应的信息加密。除了HTTP 之外SOAP 也可以使用SMTP,FTP 等其它通讯协议来传输资料,但是目前除了HTTP 外,其它部份的实作都还没有定论,由于SOAP 的Request/Response 核心运行模式跟HTTP 协议很类似,所以目前的操作及程序编写都以HTTP为主,相信以后应该会有更多的协议来满足不同情况的应用。
一个标准的SOAP Request 样子大概如 代码清单1 (使用HTTP):
代码清单1
POST /Project2.MyService/soap/IMyService HTTP/1.1
Accept: application/octet-stream, text/xml
SOAPAction: "urn:MyServiceIntf-IMyService#GetComplexType"
…….
<?xml version="1.0" encoding=''UTF-8''?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<NS1:GetComplexType xmlns:NS1="urn:MyServiceIntf-IMyService" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">