Delph6生成Web Service及它时间效率问题

类别:.NET开发 点击:0 评论:0 推荐:

Web Service 的测试报告(Delphi

 说明:使用Delphi操作一个Web Service是不复杂的,而创建一个Web Service服务及生成客户端调用相对都不难,在delphi6中有几个现在的组件精灵的,我们用它便可以向导式的生成我们所需要的接口方法,只是开头摸索的过程有点费劲,等把架子弄好之后,再往里添加新的方法时就很容易了,我下面将结合一个例子描述一下我的创建过程,并简单说明一下它的执行效率的测试,最后再和孙一波交叉测一下,比较一下优劣(各方面)。

 测试环境:Web Service(以下简称WS)放在本机上,走IISWeb服务。客户端也在本机上,两端都是用delphi6所编写的。

 时间效率:耗时主要费在两个方面,其一是WS的定位找寻;其二是数据库的连接及数据库的操作(主要耗在连接上,操作我认为几乎可以忽略)。

执行一个操作(如:SelectInsert SQL操作)大概要半分钟左右,主要是第一次操作慢,如果你连着做几个动作,那个时间则要不了多久的。所以大头的时间都是耗在WS的定位网络时耗上。

 在数据库的连接上,我做了两个实例,其一是用ODBC连接做相关操作,其二是用ADO连接做操作,这两个实例给我的人为感觉上差不多时间,没有太大区别,等你们测再看看了。

 程序编写难度:除了那几个新组件要熟悉一下外,其余的都是delphi5里的东东,难度不是很大,也比较容易上手,如果有一个模式可以套的化。编第一个WS我花了一天多点的时间,主要是国内的站点上用C#讲的比较多些,用delphi的则很难找到现成的例子,我是结合《程序员》杂志上及一两个国外站点上找的资料而写的。

 下面我就把这个Test的思路流程及一些关键的技术给描述一下,给大家参考,希望能抛砖引玉,呵呵!

 一、服务器端实现

1New 一个Application

2.在New Items页选择WebService中选择Soap Server Application,系统会自动给你生成一个Web Module,里含三个组件:一个TTPSoapDispatcher组件, 一个 HTTPSoapPascalInvoker组件, 和一个 WSDLHTMLPublish 组件,如下图:

第一个组件响应到来的SOAP请求而后将它们发送给我们的Web模块.第二个组件将到来的SOAP请求翻译成对我们的Pascal对象方法的调用过程.第三个模块产生基于我们发布的可调用界面的WSDL,以便外界能够得知如何使用我们的Web服务,这些我们可以先不管,因为这都是自动产生的,如果不想深入研究WS的机制的化,这些可先抛在一边,因为它们的功能已全部自已产生,不用我们去操心了。

 3.然后生成二个比较重要的文件,来描述我们这个Test WS能对外提供哪些服务的,据我摸索,这两个文件只能手工写,它们也是WSdelphi中的架子。具体怎么写可参看我的源码,在王剑白的共享目录中有。

 4.再生成一个数据模块,它是用来和数据库打交道的,有TdataBaseTQuery(两个一个放有反馈结果的SeleSQL,一个是没有反馈结果的ExecSQL),这个DM在步骤三中接口实现中都会用上的。

 5.这些都做完后,编译生成Exe文件,一个Web Service就完全生成了,Pretty Cool HuH!,然后我们可以用Http://localhost/Service/test/Itest/wsdl/Itest,在Brower里就可以看到此WSWSDL的描述了,一切就绪了,就等着调用了。

 

二、客户端实现

说明:使用delphi6开发调用Web Service的客户端应用程序更简单了,因为它提供的WebServices组件组中的THTTPRIO组件是很方便的,只要我们设它的欲调用的WSWSDL,那么THTTPRIO组件便可以自动的处理所有调用的WS的细节了。

步骤:

1.  New 一个Project Application

2.  New Items页选择WebService中选择Web Service Importer,在提示框中输入Http://localhost/service/test/Itest/wsdl/Itest,也就是WSDLFilenameURL),系统会自动产生一文件,来描述我们的WS,这个我们也可以先不管,打开一看,里头有我们所定义的函数说明。

3.  New 一个Form,拽入THTTPRIO组件,设好它的属性WSDLLocation,同样是上面那个串,选好它的PortService属性,我们该做的预备工作都做好了

4.  拽一个Button过来,写你想调用的方法就可以了。好了,全部完了!

有几点注意的地方:

1.  WS方法实现文件中要创建数据模块,我的程序里用CreateDM私有函数来完成的,最后再FreeDM掉,千万不能在Project中用Application.CreatFormTDM,DM)来完成,要不WS总会有错的。

2.  IIS虚目录中,一定要选上执行CGI的权利那一项,要不也是不行的。

3.  New Soap Server Application时,最好不要选择创建DLL形式的WS,要不编译时总要重起机子的,否则是不让编译的。 

还存在的问题:

1.调WS时,不能跟踪进去,不知有没有好的办法。

2.除了DM方式操作数据库外,不知还有没有别的途径来,因为我想把数据库操作或者说业务逻辑部分建立在WS之上一层,让它先运行,驻留在内存中,这样以后WS再调时,就不用再与数据库连接,因为已建好,这样可能会大大提高时间效率的,这些问题,我想以后再慢慢想吧!

本文地址:http://com.8s8s.com/it/it46079.htm