一、ISAPI概述 Microsoft的WEB服务器提供了不同的ISAPI,应用ISAPI能够开发出高性能的应用程序。
ISAPI具有两类组件:ISAPI扩展和ISAPI过滤器,本文着重介绍ISAPI扩展的应用和开发。
ISAPI应用程序通过DLL实现,DLL的特性使它能够作为WEB服务器自身的扩充来装载。在WEB服务器的地址空间运行, 而且只在第一次请求时装载一次,以后每一个后续请求通过创建一个线程(仅用一个简单的函数调用) 来完成,这比CGI创建一个进程要节约大量 的时间和空间等资源。
ISAPI扩展通常代替传统Web应用程序中CGI脚本的位置,由客户触发,为其特殊请求服务。
------清单1--------------
1.<html>
2. <img src="myGetGrp.dll">
3.</html>
如清单1所示代码,服务器将调用myGetGrp.dll中提供的函数得到一GIF图像文件数据发 送给客户浏览器,在这里,myGetGrp.dll就是一个ISAPI扩展。
如果服务器确定将执行一个ISAPI扩展, 他首先检查此扩展是否已经装入高速缓存,若没有,则指定的DLL被装载;装入DLL后,服务器就调用DLL中的HttpExtensionProc()函 数对请求提供服务, 这里是ISAPI程序员放置具体功能操作的位置,服务器将所有必要 的信息通过一结构类型参数传递给这个函数,包括请求本身的内容和程序员将用到的回 调函数等,用回调函数,可以将数据传递给用户以及执行其他的操作。
注意:必须牢记服务器是启动多线程来处理同时接收到的多个请求的,所以必须正确处理线程间的同步,否则将会导致数据破坏甚至系统崩溃。
二、用C++ Builder开发ISAPI扩展应用程序 C++ Builder是Inprise公司继Delphi之后开发的又一个通用的客户/服务器结构的 开发工具。 它使用了C++语言,可以产生更快速和更高效的代码。目前已成为继Visual Basic、Delphi之后,在32位Windows环境下最具有吸引力的开发工具之一。
启动C++ Builder后,用File→New菜单项打开New Items对话框,在New页面下选中 Web Server Application选项,单击<OK>按纽,弹出一New Web Server Application对 话框,选中ISAPI/NSAPI Dynamic将生成一ISAPI扩展应用程序框架,其主模块缺省名为 Project.cpp,其中主要实现了DLL的三个输出函数,说明如下:
1.1 GetExtensionVersion()函数 这是一个非常简单的函数,它唯一的目的是指定ISAPI版本,并给出扩展的描述。 当DLL第一次被装载时,由服务器调用。这发生在HttpExtensionProc()函数第一次调用 前, 在此函数中, 你所需做的全部就是用常量HSE_VERSION_MAJOR和HSE_VERSION_ MINOR(在Isapi2.hpp中定义)设置扩展版本域。并且返回一true值。
更多内容请看PCdog.com--C/C++进阶技术文档 C/C++相关文章 C/C++应用实例专题
