执行的。通过可执行的部份,利用指令行可调节服务器。虽然问题得到了解决并使得开发更为简便,但是设置以上步骤的过程却有点枯燥。
当你进入调试部份,在用户的允许状态下,VC++ (然后是 IIS)会在用户的帐户下运行。然而有些是用户的指令得不到进入但IIS得执行的部份,因此用户得做以下步骤:
打开User Manager域工具组(在Administrative Tools program 组)
在Policies菜单中选择User Rights
打开Show Advanced User Rights栏
在右边列表中选择Act as part of the operating system
点击Add按钮以弹出Add Users and Groups对话框。点击Show Users按钮,选择您需要的帐户。然后点击Add.
重复相同步骤以生成Generate security audits rights。
以上步骤完成后请退出然再重新登录,以使
程序生效。
IIS包含了FTP Publishing Service, Gopher Publishing Service, World Wide Web Publishing Service等三个Service。一旦调试
程序从指令行里运行IIS,则三个services则会停止运行。
如果用户想让
程序调试得到合理分配,最好关掉IIS service,转而使用Services Control Applet,并且禁止自动重启功能。
一旦当Service关闭,则项目工作区则需按以下步骤来配置
从Build菜单中选择Settings
点击Debug标签并选择"General Category".
在"Executable for debug session"域中键入可执行IIS的位置
在"Program arguments" field中键入"-e w3svc"
点击Link 标签。
在"Output filename" field中键入路径和文件名。路径会在站点的目录树里显示,因此可以通过URL进入。例如:您的站点根目录是c:\www\,并且您将"helloweb.dll"放在根目录里,因此URL则会是:
http://www.mysite.com/helloweb.dll
请在更改设置后退出登录并重新登录。
由ISAPI Extension 向导生成的默认设置包括了编译ISA的所有细节。现在您已完成配置调试
程序的环境,现在可以创建并运行项目。
按F5以打开ISA,当系统询问是否建立项目时,按YES。
在
程序调试创建的几秒后,IIS会在后台运行。
后将DLL的URL输入你喜爱的网络浏览器,记住在尾部加入一个问号。
则URL会显示如下:
http://www.mysite.com/helloweb.dll?
第一次连接到ISA会耗费上几秒。但是DLLS会在执行后进行缓存,因此速度会变得稳定。
在DLL登录后,将会显示以下信息:
This default message was produced by the Internet Server DLL Wizard.
Edit your CHelloWebExtension::Default() implementation to change it.
现在你已得到一个工作的ISA
Walking through the base code
当EXTENSION_CONTROL_BLOCK提出请求时,则会传送到Command Parse Map.。 Parse Map是由一系列的宏所定义的,正如下面所举的代码,是从Hello Web项目中复制过来的:
ISA有两个主要元素:Parse Map 以及 Command Handler 功能。
BEGIN_PARSE_MAP(CHelloWebExtension, CHttpServer)
// TODO: insert your ON_PARSE_COMMAND() and
// ON_PARSE_COMMAND_PARAMS() here to hook up your commands.
// For example:
ON_PARSE_COMMAND(Default, CHelloWebExtension, ITS_EMPTY)
DEFAULT_PARSE_COMMAND(Default, CHelloWebExtension)
END_PARSE_MAP(CHelloWebExtension)
BEGIN_PARSE_MAP标注了parse map的起始处,ISA''s ChttpServer 和基类CHttpServer作为参数。
ON_PARSE_COMMAND_PARAMS()表明对指令处理器是一种特殊请求格式或命令,它的参数就是指向的函数的类名和请求的格式。DEFAULT_PARSE_COMMAND说明那个函数被调用,参数是被调用的类名。
Co