Web Service 的测试报告(Delphi)
说明:使用Delphi操作一个Web Service是不复杂的,而创建一个Web Service服务及生成客户端调用相对都不难,在delphi6中有几个现在的组件精灵的,我们用它便可以向导式的生成我们所需要的接口方法,只是开头摸索的过程有点费劲,等把架子弄好之后,再往里添加新的方法时就很容易了,我下面将结合一个例子描述一下我的创建过程,并简单说明一下它的执行效率的测试,最后再和孙一波交叉测一下,比较一下优劣(各方面)。
测试环境:Web Service(以下简称WS)放在本机上,走IIS的Web服务。客户端也在本机上,两端都是用delphi6所编写的。
时间效率:耗时主要费在两个方面,其一是WS的定位找寻;其二是数据库的连接及数据库的操作(主要耗在连接上,操作我认为几乎可以忽略)。
执行一个操作(如:Select或Insert SQL操作)大概要半分钟左右,主要是第一次操作慢,如果你连着做几个动作,那个时间则要不了多久的。所以大头的时间都是耗在WS的定位网络时耗上。
在数据库的连接上,我做了两个实例,其一是用ODBC连接做相关操作,其二是用ADO连接做操作,这两个实例给我的人为感觉上差不多时间,没有太大区别,等你们测再看看了。
程序编写难度:除了那几个新组件要熟悉一下外,其余的都是delphi5里的东东,难度不是很大,也比较容易上手,如果有一个模式可以套的化。编第一个WS我花了一天多点的时间,主要是国内的站点上用C#讲的比较多些,用delphi的则很难找到现成的例子,我是结合《程序员》杂志上及一两个国外站点上找的资料而写的。
下面我就把这个Test的思路流程及一些关键的技术给描述一下,给大家参考,希望能抛砖引玉,呵呵!
一、服务器端实现
1.New 一个Application
2.在New Items页选择WebService中选择Soap Server Application,系统会自动给你生成一个Web Module,里含三个组件:一个TTPSoapDispatcher组件, 一个 HTTPSoapPascalInvoker组件, 和一个 WSDLHTMLPublish 组件,如下图:
第一个组件响应到来的SOAP请求而后将它们发送给我们的Web模块.第二个组件将到来的SOAP请求翻译成对我们的Pascal对象方法的调用过程.第三个模块产生基于我们发布的可调用界面的WSDL,以便外界能够得知如何使用我们的Web服务,这些我们可以先不管,因为这都是自动产生的,如果不想深入研究WS的机制的化,这些可先抛在一边,因为它们的功能已全部自已产生,不用我们去操心了。
3.然后生成二个比较重要的文件,来描述我们这个Test WS能对外提供哪些服务的,据我摸索,这两个文件只能手工写,它们也是WS在delphi中的架子。具体怎么写可参看我的源码,在王剑白的共享目录中有。
4.再生成一个数据模块,它是用来和数据库打交道的,有TdataBase,TQuery(两个一个放有反馈结果的SeleSQL,一个是没有反馈结果的ExecSQL),这个DM在步骤三中接口实现中都会用上的。
5.这些都做完后,编译生成Exe文件,一个Web Service就完全生成了,Pretty Cool ,HuH!,然后我们可以用Http://localhost/Service/test/Itest/wsdl/Itest,在Brower里就可以看到此WS的WSDL的描述了,一切就绪了,就等着调用了。
二、客户端实现
说明:使用delphi6开发调用Web Service的客户端应用程序更简单了,因为它提供的WebServices组件组中的THTTPRIO组件是很方便的,只要我们设它的欲调用的WS的WSDL,那么THTTPRIO组件便可以自动的处理所有调用的WS的细节了。
步骤:
1. New 一个Project Application
2. 在New Items页选择WebService中选择Web Service Importer,在提示框中输入Http://localhost/service/test/Itest/wsdl/Itest,也就是WSDL(Filename或URL),系统会自动产生一文件,来描述我们的WS,这个我们也可以先不管,打开一看,里头有我们所定义的函数说明。
3. New 一个Form,拽入THTTPRIO组件,设好它的属性WSDLLocation,同样是上面那个串,选好它的Port和Service属性,我们该做的预备工作都做好了
4. 拽一个Button过来,写你想调用的方法就可以了。好了,全部完了!
有几点注意的地方:
1. 在WS方法实现文件中要创建数据模块,我的程序里用CreateDM私有函数来完成的,最后再FreeDM掉,千万不能在Project中用Application.CreatForm(TDM,DM)来完成,要不WS总会有错的。
2. 在IIS虚目录中,一定要选上执行CGI的权利那一项,要不也是不行的。
3. 在New Soap Server Application时,最好不要选择创建DLL形式的WS,要不编译时总要重起机子的,否则是不让编译的。
还存在的问题:
1.调WS时,不能跟踪进去,不知有没有好的办法。
2.除了DM方式操作数据库外,不知还有没有别的途径来,因为我想把数据库操作或者说业务逻辑部分建立在WS之上一层,让它先运行,驻留在内存中,这样以后WS再调时,就不用再与数据库连接,因为已建好,这样可能会大大提高时间效率的,这些问题,我想以后再慢慢想吧!