Delphi调试CGI或ISAPI 转
因为dll文件已驻留内存,可用intrabob进行调试,也可用PWS进行调试,不过要换文件。
IntraBob是资深程序员Dr.Bob编写的免费工具软件,用于测试Delphi编写
的CGI/WinCGI/ISAPI程序,它可以代替PWS/IIS等WWW服务器软件,
调试本地的CGI/WinCGI/ISAPI程序,其原理是模拟PWS/IIS接受WWW请求,
并根据您的设置将类似于“http://www.123.com/testisapi.dll”
的远程URL映射到本地文件,如“d:\intrabob\demo\TestISAPI.dll”。
IntraBob目前的版本为5.0,支持调试Delphi3 -4 C/S、Delphi 5
Pro/Enterprise、
C++Builder3-4 C/S中的WebModules,同时全面支持WebBroker技术和Delphi5
中的InternetExpress。
可以从http://www2.drbob42.com/drbob42/intrabob.zip下载IntraBob5.0软件
及
演示文件,IntraBob.zip文件解压缩后有六个文件,各个文件用途如下:
Debug.dll:ISAPI程序,用于演示IntraBob的调试功能。
Debug.dpr:ISAPI程序,Debug.dll的源代码,用于演示IntraBob的调试功能。
Drbob42.zip:Internet组件,CRC、CRC32、SMTP、 POP3、FTP。
Home.htm:调用演示ISAPI程序Debug.dll的HTML 页面文件。它是IntraBob程序
启
动时调用的默认页面。
Intrabob.exe:IntraBob程序,用来调试CGI/ WinCGI/ISAPI程序。
Readme:IntraBob程序功能介绍及使用方法。
下面以IntraBob5.0和Delphi3.0为例介绍用 IntraBob调试CGI/WinCGI/ISAPI
程序
的方法。我们将用Delphi3.0编写一个简单的ISAPI 程序来演示IntraBob的用法。
假设IntraBob5.0被解压缩到文件夹“d:\intrabob\”下,被调试的ISAPI位于文件夹
“d:\intrabob\demo\”下。
一、调用页面
首先,我们需要一个页面,该页面用于调用要调试的 ISAPI程序并向其传递参
数,
它要求用户输入姓名、性别、省份,用户提交后将这三个参数给
http://www.123.com/testisapi.dll用于显示。
该页面存为 “D:\INTRABOB\demo\testisapi.htm”,其HTML代码如下:
< HTML >
< HEAD >
< TITLE > 用IntraBob调试ISAPI < /TITLE >
< /HEAD >
< BODY >
< H2 > 用IntraBob调试ISAPI < /H2 >
< HR >
< FORM ACTION=“http://www.123.com/
testisapi.dll " METHOD=“POST " >
< br > 姓名: < INPUT TYPE=“text " NAME=“Name "
SIZE=“40 " value=‘王发军 ' >
< br > 性别: < INPUT TYPE=“radio "
NAME=“Sex "value=‘男 ' checked> 男
< INPUT TYPE=“radio "NAME=“Sex " value=‘女 ' > 女
< br > 省份: < Select Name=Province > < Option > 河南
< /Option > < Option > 河北 < /Option > < /Select >
< br > < INPUT TYPE=“SUBMIT " VALUE=“提交测试ISAPI " >
< INPUT TYPE=“RESET " VALUE=“重新填写 " >
< /FORM >
< /BODY >
< /HTML >
二、编写ISAPI程序
然后,我们用Delphi3.0编写一个简单的ISAPI程序,接受姓名、性别、省份三个
参数并将其显示出来。
(1)建立一个Web Server Application工程文件,选择“ISAPI/NSAPI Dynamic
Link Library”;
(2)在WebModule1中增加一个WebActionItem1,在其OnAction事件中写下如下代
码:
procedure TWebModule1.WebModule1WebActionItem1Action
(Sender: TObject;Request: TWebRequest; Response:
TWebResponse; var Handled: Boolean);
var
Name,Sex,Province : string;
begin
Name := Request.ContentFields.values[‘name '];
Sex := Request.ContentFields.values[‘Sex '];
Province := Request.ContentFields.values[‘Province '];
Response.Content := ‘
您的输入如下: ';
Response.Content := Response.Content + ‘
姓名: ' + name;
Response.Content := Response.Content + ‘
性别: ' + sex;
Response.Content := Response.Content + ‘
省份: ' + Province;
Response.Content := Response.Content + ‘ ';
end;
(3)将程序存到文件夹“d:\intrabob\demo\”下,命名工程文件为
TestISAPI.dpr。
(4)用Ctrl+F9编译确保无语法错误,并生成ISAPI 程序文件TestISAPI.DLL。
三、用IntraBob5.0调试ISAPI程序
1. 设置ISAPI工程文件运行参数
将IntraBob.exe设置为TestISAPI.dpr的Host Application。在“Run”菜单下的
“
Parameters...”中,将Host Application设置为 “D:\INTRABOB\Intrabob.exe”,
如下图所示:
另外,用F5在程序中设置一个断点,用于演示 IntraBob的调试功能。
2.开始ISAPI程序调试
用F9开始运行程序TestISAPI.DLL,IntraBob.exe 将随之启动,并会调用其默认
页
面“D:\INTRABOB\HOME.HTM”,在IntraBob.exe调用的IE 控件的地址栏输入我们的
调试
页面地址“D:\INTRABOB\demo\testisapi.htm”,可显示页面,如下图所示:
3.设置IntraBob选项,调试ISAPI程序
为了用IntraBob调试ISAPI程序,还需要设置 IntraBob选项,主要是将远程URL
映
射到本地文件,也就是将 “http://www.123.com/testisapi.dll”的远程URL映射到
本地文件 “d:\intrabob\demo\TestISAPI.dll”。选择“Options”页,IntraBob
已经从显示的页面中提取出远程URL“http://www.123.com/testisapi.dll”,并填
入
“Remote URL”栏,我们只需要将“Local App”栏指定为
“d:\intrabob\demo\TestISAPI.dll”即可。然后回到 “Browser”页,在测试页面
中点击“提交测试ISAPI”按钮来提交已输入的数据。此后,Delphi IDE的代码窗口
被激活,我们会看到程序已运行到刚才设置的断点处,我们就可以开始像调试普通应
用程序一样调试ISAPI程序了,剩下的就是Delphi程序调试技巧问题了。将ISAPI 运
行到结束,IntraBob将输出结果以“D:\INTRABOB\output.htm”的形式显示在
“Browser” 页中。由于IntraBob显示HTML页面时用的是微软提供的IE控件,我们可
以用鼠标右键来选择“后退”、 “刷新”、“查看源代码”等功能。
四、注意事项
(1)如果在“Browser”窗口中刷新调试页面,IntraBob 选项将恢复为默认设
置,
此时可能需要在“Options”页中重新设置ISAPI的路径即重新设置“Local App”的
值。
否则可能出现类似“TerminateExtension crashed in testisapi.dll” 的错误。
(2)IntraBob5.0不接受48K以上的提交数据。
有了IntraBob这个工具软件,我们在本机上调试 CGI/WinCGI/ISAPI程序就不
必安装PWS或IIS了,同时也不用频繁启动和停止PWS/ⅡS、甚至重新启动计算机了。
以上操作和程序在PWin98 + Delphi3.0 C/S + IntraBob5.0 + IE4.0及
PWinNT4.0
+ Delphi3.0 C/S + IntraBob5.0 + IE5.0下测试通过。
Delphi调试CGI或ISAPI 转的更多相关文章
- 您试图从目录中执行CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序
您试图从目录中执行CGI.ISAPI 或其他可执行程序,但该目录不允许执行程序 本人使用WIN2003 INTERNET信息服务(IIS)管理器建立一个网站虚拟目录,结果浏览网页时出现错误,错误提示信 ...
- delphi调试需要管理员权限程序报错“Unable to create process:请求的操作需要提升”
delphi调试启动需要UAC权限的程序的时候会报错“Unable to create process:请求的操作需要提升”.这是因为delphi没有以管理员身份启动,这样delphi createp ...
- [转帖]CGI与ISAPI的区别(转)
CGI与ISAPI的区别(转) 不知道原始网站是哪个 博客园里面也是转帖的 https://www.cnblogs.com/eret9616/p/8515095.html 不过我还是不了解CGI和IS ...
- Delphi 调试WEBService程序(ISAPI或CGI) 把Web App Debugger executable转换成 ISAPI/NSAPI
1.新建一个web工程,请选中最下面一项:Web App Debugger executable,Coclass name我们设为demo1: 2.在弹出的WebModule2中右击,在弹出的Ac ...
- Delphi Web Service和ISAPI的区别与联系 转
Web Service和ISAPI的区别与联系 1.Web Service 是一种新的web应用程序分支,他们是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.Web Service ...
- CGI和ISAPI
1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座桥,把网页和WEB服务器 ...
- Delphi 调试日子 - TLogger
这段时间又开始用delphi了,才发现我对它这么的不熟悉! 简单的而有效的调试工具 Logger 这个是“榕树下”的作品,小巧而精悍.稍微调整了一下.在需要的地方加入 {$IFDEF DEBUG} ...
- CGI/FASTCGI/ISAPI区别
一 CGI原理及其性能 1) CGI概念CGI即通用网关接口(Common Gateway Interface),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座 ...
- 问题-delphi 调试(F8)错行处理
在delphi 7中(其他版本也可能碰到该问题),编译后,代码左边显示蓝色小点,表示哪句代 码是被编译了的,可今天我的一些代码不能显示那些蓝点了,这样也就不能在上面设断点了,而且用F8跟踪发现执行的顺 ...
随机推荐
- artTemplate模板引擎的源码拜读
最初接触的模板引擎还是基于node的ejs,当时觉得很神奇原来还可以这么玩,后来随着学习的深入,使用过jade,doT等,当然还有一些比较火的诸如juicer.underscore还没有深入接触,直到 ...
- 19个非常有用的Javascript类库
Blackbird是一款非常酷的JavaScript调试工具,带有一个漂亮的界面显示和过滤调试信息. http://www.gscottolson.com/blackbirdjs/ Treesaver ...
- asp.net各种获取客户端ip方法
Request.ServerVariables("REMOTE_ADDR") 来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真 ...
- Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...
- 消除热块(hot block)
上篇日志提到了,那么高的负载,是存在数据块读竞争,下面介绍几个方法来消除块竟争 查找块竟争 SELECT p1 "file#", p2 "block#", p3 ...
- CSS Text文本格式
Text Color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如"#FF0000" 一个RGB值 - "RGB(255,0,0)& ...
- artDialog.js的使用
开发项目中用到了artDialog.js,从而专门学习一下如何配置和使用. 一.artDialog是什么 artDialog是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架. 二. ...
- ie8中parseInt字符型数值转换数值型问题
今天在ie8中测试项目发现一个奇怪的问题,"08" "09" 强转竟然变成了: 后来发现ie8把"08" "09" 默认 ...
- Fibonacci 数列递归 重复计算
public class Fibonacci{ public static long F(long n){ System.out.println("call F" + n); ) ...
- php 单引号与双引号区别
一.单引号与双引号区别 1." "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出. 2.' '单引号里面的不进行解释,直接输出. 从字面意思上就可以看出,单引号比双引 ...