ISAPI编程技术
本作品内容为ISAPI编程技术,格式为 doc ,大小 44032 KB ,页数为 4页
('一.ISAPI简介ISAPI(InternetServerApplicationProgrammingInterface)是Microsoft推出的运用在IIS内的一类基于HTTP协议的编程接口。通常将开发出的ISAPI应用模块称为ISA。简单地说,ISAPI是IIS提供的CGI替代技术。当然,ISAPI也可被认为是一种改良的CGI技术。ISAPI应用一般被开发为.dll的进程内DLL(In-processDLL),这使ISAPI应用的各实例在运行时同HTTPserver位于相同的进程空间,所以各个ISAPI应用实例可以透明地访问HTTPserver输出的资源。同传统的CGI相比,ISAPI应用具有更小的负荷。因为ISAPI应用在启动时无须申请创建自己的进程,而只需绑定到HTTPserver的进程空间,所以其启动过程的速度要比传统的CGI程序快得多。从另一方面讲,ISAPI应用由于具有进程内属性,所以在其访问HTTPserver的资源时,无须跨进程边界,这也使其运行效率大大提高。此外,IIS在管理进程内的线程时,实现了线程池(thread-pool)机制,这使ISAPI应用各实例的创建、释放和相应的资源分配更为有效。ISA被分为两种类型:ISAPIServerExtension和ISAPIFilter。其中,ISAPIServerExtension可实现通常CGI程序的功能;而ISAPIFilter则可为IIS提供附加的功能。ISAPIFilter在Webserver启动时被启动,在Webserver停止时被卸载。用户对Webserver的请求均会先通过ISAPIFilter过滤,而Webserver返回浏览器的内容也会首先经ISAPIFilter过滤。由此可见,若要实现自定义的访问授权机制、数据压缩、数据加密和做日志等功能时,ISAPIFilter是一个合适的接口。二.开发ISAPIServerExtension应用步骤下面的例子描述了使用MFC和ISAPIExtensionWizard开发ISAPIServerExtension。1.创建工程⑴标识ProjectName为ISASample,确定存储路径。选择ISAPIExtensionWizard,点击OK按钮。⑵完成ISAPIExtensionWizard提供的各个选项,完成工程的创建。2.探索ISAPIExtensionWizard生成的文件ISAPIExtensionWizard自动生成了ISASample.cpp、ISASample.h、ISASample.DEF、ISASample.RC、Resource.h、StdAfx.cpp和StdAfx.h等一系列文件。⑴ISASample.h是CISASampleExtension类的声明。CISASampleExtension类的基类是MFC类库所提供的CHttpServer。基类CHttpServer被用作创建和管理ISAPIserverextensionDLL。我们的开发任务主要是通过CHttpServer的派生类CISASampleExtension来完成的。⑵生成的ISASample.DEF具有如下的定义:LIBRARY"ISASAMPLE"EXPORTSHttpExtensionProcGetExtensionVersionTerminateExtension1以上的ISASample.DEF文件中定义了DLL将要输出的3个函数:HttpExtensionProc、GetExtensionVersion和TerminateExtension。程序员可以重写这些被派生来的成员函数内容。Webserver在接到ISA的调用请求时将调用HttpExtensionProc方法,HttpExtensionProc可以通过回调函数读取用户数据并完成其他功能。GetExtensionVersion可用来获得ISAPIserverextensionDLL的版本号。GetExtensionVersion及HttpExtensionProc均在CHttpServer中有默认的实现。TerminateExtension为卸载提供了一个安全的途径。3.定义parsemap⑴什么是parsemap?通过parsemap,可以将用户(浏览器)请求映射到CISASampleExtension类的成员方法。顺便提一句,别忘了CISASampleExtension类是从CHttpServer类派生出来的。MFC为ISAPI的parsemap定义了一套宏,具体描述请参阅附表。⑵声明parsemap在ISASample.cpp中完成下列代码:BEGIN_PARSE_MAP(CISASampleExtension,CHttpServer)//TODO:insertyourON_PARSE_COMMAND()and//ON_PARSE_COMMAND_PARAMS()heretohookupyourcommands.//Forexample:ON_PARSE_COMMAND(ShowHello,CISASampleExtension,ITS_PSTRITS_PSTRITS_I4)ON_PARSE_COMMAND_PARAMS("NameCityID")ON_PARSE_COMMAND(Default,CISASampleExtension,ITS_EMPTY)DEFAULT_PARSE_COMMAND(Default,CISASampleExtension)END_PARSE_MAP(CISASampleExtension)上面的声明使ISASample.dll具有一个命令ShowHello和一个默认命令。在调用ShowHello命令时,共有3个参数,分别为Name、City和ID。ITS_PSTR标识参数类型为字符串,而ITS_I4标识参数类型为long。有关常数所代表的数据类型请参见MSDN。⑶实现命令默认的命令Default已被ISAPIExtensionWizard自动生成,如果需要修改或去掉Default命令,可以对DEFAULT_PARSE_COMMAND宏及ISASample.h与ISASample.cpp中域Default成员函数有关的代码做出相应修改或删除。为了实现ShowHello命令,首先需要在类CISASampleExtension中声明成员ShowHello。请在ISASample.h中声明公共的成员函数ShowHello如下:voidShowHello(CHttpServerContextpCtxt,LPCSTRpstrName,LPCSTRpstrCity,LONGlID);该函数代码如下:voidCISASampleExtension::ShowHello(CHttpServerContext2pCtxt,LPCSTRpstrName,LPCSTRpstrCity,LONGlID){StartContent(pCtxt);WriteTitle(pCtxt);pCtxt<<_T(“ ”);pCtxt<<_T(“Name ”);pCtxt<<_T(“”)< ”);pCtxt<<_T(“City ”);pCtxt<<_T(“”)< ”);pCtxt<<_T(“”);}⑷配置ISASample.dll用Build命令生成ISASample.dll后再将其拷贝到具有Read和Execute权限的Web发布目录下。下面的HTML文档片段使用HTML文档中的FORM来引用ISASample.dll的ShowHello命令。ID ”);pCtxt<<_T(“”)<
Inputthecityinwhichyoulive:
InputyourIDnumber:
提供ISAPI编程技术会员下载,编号:1700877448,格式为 docx,文件大小为4页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。