(1)概论
Web Services是自包含(self-contained)的模块化应用程序,能够被跨越网络(例如World Wide Web)发布(publish)和调用(invoke)。Web Services提供无缺的接口定义,说明所提供的服务。
Web Services被设计为容许客户端和服务器进行松散耦合。也就是说,服务器端的实现并不要求客户端应用某种特定的平台或者开发语言。除了在语言无关方式下定义接口以外,Web Services也被设计为容许使用多重通信机制。
Delphi经过使用SOAP(简单对象访问协议)来实现对Web Services的支持。SOAP是为在分散分布式环境中交换信息而设计的标准轻量型协议。它使用XML来编码远程过程调用,一般使用HTTP做为通信协议。要得到有关SOAP的更详细的信息,请在 http://www.w3.org/TR/SOAP/ 查看SOAP规范。
注意:虽然Delphi只支持基于SOAP和HTTP的Web Service,但其框架已经十分完整,能够被扩展到其余编码和通信协议下工做。
Delphi以SOAP为基础的技术能够在Windows下运行,很快也将在Linux上实现,所以它能够做为跨平台分布式程序的基本组分。与发布使用CORBA的分布式程序不一样,它在客户端不须要安装任何运行时软件。由于这种技术基于HTTP消息,它的优点在于在各类机器上都获得了普遍的支持。对Web Services的支持创建在Delphi的跨平台Web服务器应用体系结构顶端。
使用Delphi既能够创做实现Web Services的服务器,也能够开发调用这些服务的客户端。若是使用Delphi同时开发服务器和客户端应用程序,开发人员就能够共享定义Web Services接口的单一单元。另外,可使用Delphi开发实现响应SOAP消息的Web Services的任意服务器程序的客户端,用Delphi开发的发布Web Services的服务器程序也能够被任意的客户端调用。
若是客户端或者服务器不是用Delphi创做的,你仍然能够经过使用WSDL(Web Services定义语言)文档来公布可使用哪些接口或者引入如何调用这些接口的信息。在服务器端,你的应用程序能够发布一份WSDL文档来描述你的Web Services。在客户端,向导程序将帮助你引入已发布的WSDL文档,为你提供你所须要的接口定义和链接信息。
(2)创做支持Web Services的服务器
在Delphi中,支持Web Services的服务器是经过可调用(Invokable)接口构建的。可调用接口是编译后包含运行时类信息(RTTI)的接口。这份RTTI会在解释传入的客户端方法调用时用到,经过它方法调用才可以被正确的转换(marshal)。
除了可调用接口和实现它们的类以外,你的服务器须要两种组件:调度者(dispatcher)和调用者(invoker)。调度者(THTTPSoapDispatcher)是接收SOAP消息并将它们传送给调用者的的自动调度组件。调用者(THTTPSoapPascalInvoker)解释SOAP消息,辨别其调用的可调用接口,执行调用而且组装响应消息。
注意:THTTPSoapDispatcher和THTTPSoapPascalInvoker被设计为响应包含SOAP请求的HTTP消息。这种基础体系结构很是通用,不过,它也能够经过使用不一样的调度者和调用者组件来支持其它协议。
只要你注册了你的可调用接口和它们的实现类,调度者和调用者就会自动处理全部(在HTTP请求信息的SOAP动做头中调用这些接口的)消息。
(3)构造一个Web Services服务器
经过下列步骤来构造一个实现Web Services的服务器程序。
一、定义构造你的Web Services的接口。这些接口定义必须是可调用接口。最好在单独的单元文件中建立你的接口定义,把它们从包含实现类的单元中分离出来。这样,定义接口的单元就能够同时被服务器和客户端程序所包含。在这个单元的初始化(initialization)区,添加注册这些接口的代码。
二、若是你的接口使用了任何复合(非标准)类型的数据,你就必须保证这些数据类型可以被正确转换(marshal)。Web Services应用程序只能处理包含说明自身结构的运行时类信息(RTTI)的特定对象。有关建立和注册描述复合类型的对象的详细信息,参见”在可调用接口中使用复合类型”一节。
三、定义并完成一系列类来实现你在第1步中定义的可调用接口。每个实现类中,你可能还须要建立一个工厂过程来示例该类。在该单元的initialization段,增长代码来注册实现类。具体作法参见”建立和注册实现类”一节。
四、若是你的应用程序在试图执行SOAP请求时发生错误,错误会被自动编码封装成一个SOAP故障包,代替方法调用的结果被返回客户端。若是你想传送更多的信息,而不是一条简单的错误消息,能够建立本身的例外类,对错误进行编码并返回。具体作法参?quot;为Web Services建立自定义例外类”一节。
五、选择File/New/Other菜单项,在WebServices页,双击Soap Server application图标。选择实现Web Services的Web服务器应用程序的类型。关于各类类型Web服务器应用程序之间的不一样,参见”Web服务器应用程序类型”一节。
六、向导生成一个包含三个组件的新Web Service应用程序:
一个是调用者组件(THTTPSOAPPascalInvoker)。调用者完成SOAP消息和你在第1步中定义的全部接口方法之间的转换。
一个是调度者组件(THTTPSoapDispatcher)。这个调度者会自动响应送入的SOAP消息并把它们传递给调用者。你可使用它的WebDispatch属性来识别你的应用程序所响应的HTTP请求消息,包括设置PathInfo属性来指明指向你的应用程序的任何URL的路径部分,设置MethodType属性来指明请求消息的方法头。
一个是WSDL发布者(TWSDLHTMLPublisher)。WSDL发布者发布描述你的接口以及如何调用它们的WSDL文档。它使非Delphi编写的客户端程序也能够调用你的Web Service应用程序。
七、选择Project/Add To Project菜单项,把你在第1步到第4步中建立的单元文件加入Web服务器应用程序。web