Delphi7下开发Webservice以及部署问题概述

Delphi7支持五种部署方式来开发Webservice,分别介绍:

Isapi是在IIS下运行;

CGI是可以在IIS和apache下运行;我自己只在iis下部署了,没试apache。

Apache 1.x需要部署到apache1的版本下;

Apache2.x需要部署到apache2;

Debugger 是可以在方便Delphi中继承调试的;

以上可以在编写完业务代码后,再根据部署环境的不同,可以单独建立项目来实现,在开发时完全一样。

以下是我在应用碰到的问题和解决方式:

<!--[if !supportLists]-->一、<!--[endif]-->首先 我以Isapi部署项目,在Xp Professor下能够运行,但不稳定,经常出现Xml不是正确的格式。其次我在windows2000 server下部署,通过浏览器可以看到提供了接口的服务,但当应用程序调用时,长时间没反应,最后没找见问题原因。这时,我不想让服务器依赖于操作系统的版本,决定放弃IIS,选择apache作为服务器;具体部署过程如下:

IIS setup

———

Goto the IIS ControlPanel…..控制面板

Rt.Click on My computer and select Manage

Expand the "Servers and applications" node

Expand the "Internet Information Server" node

Select "Default WebSite"

RightClick on "Default WebSite"

Select New–> Virtual Directory

Next

Set Alias to "EchoService"

Next

Set Directory to <DelphiPath>\Demos\WebServices\EchoService\server

Next

Check {Read, Run, Execute, Browse}

Next, Finish

From a webBrowser

Go to http://localhost/echoservice/

You should see the contents of the Server directory

Click on EchoService_CGI.exe

Expect: Default webPage

Click on the IEchoService wsdl link

(if in IE or NS6) you should now see the WSDL

<!--[if !supportLists]-->二、<!--[endif]-->第二 因为当前最新版的apache是2.2.8,因此我先建立Apache2的项目

项目的目标文件可以分为两种:一种是.dll文件,另外一种是.so文件;

请在编写完项目后,千万注意,因为delphi7的版本不能支持apache2.2,所以一定要打开你的HTTPD2.pas文件,进行如下修改

MODULE_MAGIC_COOKIE =$041503232; (* "AP22" *)
MODULE_MAGIC_NUMBER_MAJOR =20051115; { Apache 2.2.x}
MODULE_MAGIC_NUMBER_MINOR =0;
LibAPR =3D ‘libapr-1.dll’; {do not localize}

第一种:dll文件的项目

library ApacheTest; uses WebBroker, ApacheTwoApp, ApacheTestU in 'ApacheTestU.pas' {WebModule1: TWebModule}; {$R *.res} exports apache_module name 'ApacheTest_module'; begin Application.Initialize; ModuleName:=’ApacheTest_module ‘;

// Handler :=’lvyepiao2′; //该行在我的环境下要不得

Application.CreateForm(TWebModule1, WebModule1); Application.Run;end.第二种方式:so文件

Note: you can also use the Application page of the project options dialog to change the extension and prefix. The other change here was to update the default exported module record name from Project1_module, resulting in:

 

library ApacheTest;

 

uses

WebBroker,

ApacheApp, //or ApacheTwoApp

ApacheTestU in ‘ApacheTestU.pas’ {WebModule1: TWebModule};

 

{$R *.res}

 

{$E so}

{$LIBPREFIX ‘mod_’}

 

exports

apache_module name ‘ApacheTest_module’;

 

begin

Application.Initialize;

Application.CreateForm(TWebModule1, WebModule1);

Application.Run;

end.
 

 

最后就是在apache的配置了,用文本编辑器打开apache 目录下的conf目录里面的httpd.conf, 查找LoadModule在最后一个的下面加入以下文本

LoadModule module_record_name library_name<Location /URL> SetHandler content_type</Location>

The bits you customise are:

module_record_name is the symbol exported by the project file and is case-sensitive. In Listing 2 you can see this is ApacheTest_module
library_name is taken from the ModuleName variable (from the ApacheApp unit) and defaults to the name of the shared module binary file, with any relative path needed to access it. In my example, this will be modules/mod_ApacheTest.so
URL is the case-sensitive URL portion that identifies what URLs should be serviced by the shared module. For the example, this will be /delphi
content_type is taken from the case-insensitive ContentType variable and defaults to a lowercase string that includes the module name without the extension, with -handler appended. In my example, this is mod_apachetest-handler
比如我刚才建立的项目可以在配置文件中加入: LoadModule ApacheTest_module modules/mod_ApacheTest.so<Location /delphi> SetHandler mod_apachetest-handler</Location>然后http://localhost/delphi.可以访问,表明一切正常。

然而我还有一个问题没有解决:我本来想在使用系统初始化时在

后台createThread创建并启动该线程,结果线程一运行就报错。后来不得已把该线程毙了,有知道的请帮我回复下。

<!--[if !supportLists]-->三、<!--[endif]-->第三在apache1下就简单的多了,不存在版本问题,其它的步骤跟apache2相同,那时候apache1早就出来了,支持的挺好。我使用的apache的版本为apache1.3.22,从官网上下载就可以了。

在apache1的好处就是我在apache2下不能运行的线程在这里运行跟预想的结果一致,不知道为什么?可能是2做了一些什么变动。

<!--[if !supportLists]-->四、 <!--[endif]-->第四就是调试方式的部署了,参考delphi的demo下

<DelphiPath>\Demos\WebServices\EchoService\read.txt文件中详细描述;

需要注意的是要进行调试服务器端的程序时,先设置断点后,在delphi中直接运行服务器上的程序,然后用客户端调用时就可以进行断点调试了。

WebAppDebugger Setup

——————–

First run the Server to register it

Goto Windows Explorer and run

<DelphiPath>\Demos\WebServices\EchoService\server\EchoServer_WAD.exe

Close the app

Start the WebAppDebugger

From the DelphiIDE: Tools| WebAppDebugger

Press Start

From a WebBrowser goto http://localhost:1024

select EchoService_WAD.test_app and press go

Expect: Default webPage

Click on the IEchoService wsdl link

(if in IE) you should now see the WSDL

我在实际开发和实施中不断出现问题,后面会陆续把相关的资料发布上来,以供后来参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值