随着Internet/Intranet的快速发展,在现在的开发领域中,这是一个对所有程序员都十分诱人的领域,而Delphi的方便宜用更使大家愿意选择这一工具开发InterNet/IntraNet应用。Delphi7当中集成了IntraWeb开发工具,在学习和使用这个工具的时候,有一些心得体会,在这里写出来,如有错误和不对的地方,请指出来,愿与所有对它感兴趣的朋友共同探讨和学习。

IntraWeb有两种开发模式,它的作者称之为:AppModePageMode,即应用模式和页模式。AppMode,也称WebApplication(或者叫StandAlone),是其开发者着重推荐的,也是IntraWeb将来的发展方向,PageMode,亦即传统的Delphi下开发InteNetWebBroker的方式。应当说,两种不同的开发模式,各有优缺点,AppMode快速简便,而PageMode灵活性更强一些。

AppMode的开发应用方向是Web应用,而不是传统的网站建设。AppMode内建Internet浏览器,服务器端不需要Web应用服务器就能很好的工作。解决了Web应用程序开发中Client/Server的交互问题,可以不使用Cookie(这一点我还没有很好的理解,^_^)。AppMode下开发的程序做为NT的一个服务在Server上启动,Client在浏览器中使用一个普通的应用程序一样来完成数据库操作、表单提交、查询等工作,应当说IntraWeb在开发Web应用方面完成了一个独创性的工作。

AppMode方式并不是非常适全做网站的开发工作。

2IntraWeb应用程序的发布

1、关于IntraWeb的开发模式

好象是大家比较关心的问题,做好了东西总得放到网站上去呀,不然怎么用呢?它的应用程序发布也分两类,AppMode开发的东西比较好办,在Server端(必须是管理员身份登录的),进入Command窗口,运行c:>ApplicantionName -installApplication 做为NT下的一个服务被启动,然后客户端直接在浏览器中键入:http://www.yourDomain.com:xxxx/就可以启动(或者用http://www.yourDomain.com:xxxx/start),xxxx是你开发程序时在ServerController中设定的端口号(为避免与服务器提供的WEB服务冲突,一般不能设为80端口)

对于在页面模式下开发的应用来说,将生成的动态链接库及附加文件上传到具有执行权限的目录中即可。

3IntraWeb的开发步骤

对于AppMode来说,开发一个Web应用程序与开发普通的App应用没有什么两样。新建一个应用程序,红色的代表标准的应用,绿色的自动生成一个数据管理模块。然后要选择一个目录,因为IntraWeb的应用要生成一些Cache及需要的模板、CSS样式表等内容,您可以建一个独立的目录用于存放这些内容。

这是比较常见的IntraWeb应用开发的模式,下面我想着重谈一谈PageMode的开发应用。

1、建立一个PageMode,需要用到Delphi新建模块中的WebServerApplication,然后Delphi帮你生成一个标准的DLL模板(当然,我指的是在ISAPI/NSAPI模式下的)

  

2、建立一个新的PageForm,此处一定要分清楚,ApplicationForm是用于在AppMode下开发用的Form,而PageForm才是用于传统的WebBroker模式下的Form

 

 

3、这里要在PageForm手工加入一些模块用于程序的处理,主要有以下这些:IWApplication(应用程序处理)、IWTemplateProcessHTML(如果你用到模板的处理的话)、IWLayoutManager(如果想交互式建立Web组件的话)、IWHTMLControl(用于IntraWebHtml组件处理)等。

4、在webModule模块中的ImplenmentionUses子句中加入你要使用的PageForm模块。在webModuleForm中加入TIWPageProducer(用于处理PageForm)TIWModuleController(用于Web控制)。

5、在WebModuleForm中单击右键,新建Action,并设定该ActionPathInfoProducer(设定为风才刚才加入的TIWPageProducer),譬如:设定PathInfo:='/main'

6、对于IWPageProducer建立它的OnGetForm事件处理,并加入如下的语句:vForm:=TFormMain.Create(AWebApplication);

至此,一个简单的应用就完成了,你可以在Delphi7中按下Ctrl+F9键,生成一个Dll文件,拷贝到具有执行权限的Web目录下,在浏览器中键入:http://localhost/myweb/project1.dll/main,就可以运行了(myWeb是你在IIS中建立的Web目录)

4IntraWeb的安装中出现的问题

大家可能都从Delphi窑洞,下载了较新版本的IntraWeb,当前最新的版本(Ver.5.00.56)可以从For Delphi7For Delphi5&Delphi6(告诉你一个好消息的是,可是用v.5.00.55版的注册机!)。

在安装新版本后要,可能会出现Entry Point could not be located错误,这是因为你运行库还是老版本的缘故,请按以下步骤处理:

1、首先关闭Delphi7

2、卸载IntraWeb

3、搜索硬盘当中的*intraweb*.bpl*intraweb*.dcp,一般是在Windows的系统目录里有运行库文件,而在Delphi目录里有设计时文件,确保将这些文件全部删掉。

4、重新安装IntraWeb。因为安装过一次以后,会在注册表里产生一个注册码,再一次用注册机生成注册码,并用IWRegister.exe进行注册以后,会在LibD7目录下的IWLicenseKey.pas文件里生成两个注册码(中间以联接),删掉其中的一个,不然,运行后会产生错误。

另外,对于Delphi6的用户,必须确保UpdatePack2被安装,不然编译后会产生“"InGlobal" was compiled with a different version of System.rtl错误。

 

5IntraWeb应用程序的卸载问题

 

也是分两大类,一类是AppMode下开发的应用程序,首先要在服务管理器里面停止该程序的运行,然后在命令行状态下键入:c:>ApplicationName -uninstall,最后删除该程序即可。对于在PageMode开发的DLL来说,需要在服务管理器里面,找到组件服务,关闭它就可以。

6、在使用ADO或其他COM组件的时候,出现CoInitialize must be called”错误。

这是一个比较常见的错误,请在IWServerController中设置ComInitiaLization属性为ciMultiThreaded,而缺省的设置为ciNone

7、如何将我的StandAlone Application转换成ISAPI应用?(转自其官方网站)

program Guess;
uses
   IWInitStandAlone, Main in 'Main.pas' {formMain: TIWFormModuleBase},
   ServerController in 'ServerController.pas' {IWServerController: TDataModule};
{$R *.res}
begin
   IWRun(TFormMain, TIWServerController);
end.

1、改变Program 子句为 library.

2、改变 IWInitStandAlone IWInitISAPI.