Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 标准规范 > ISAPI编程技术

ISAPI编程技术

收藏

本作品内容为ISAPI编程技术,格式为 doc ,大小 44032 KB ,页数为 4页

ISAPI编程技术


('一.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(“ID”);pCtxt<<_T(“”)<”);pCtxt<<_T(“”);}⑷配置ISASample.dll用Build命令生成ISASample.dll后再将其拷贝到具有Read和Execute权限的Web发布目录下。下面的HTML文档片段使用HTML文档中的FORM来引用ISASample.dll的ShowHello命令。Inputyourname:

Inputthecityinwhichyoulive:

InputyourIDnumber:

附表:宏描述BEGIN_PARSE_MAP标识开始parsemap定义。ON_PARSE_COMMAND标识一个命令,即所要映射的成员函数。ON_PARSE_COMMAND_PARAMS定义命令的参数列表。这个宏必须紧接在ON_PARSE_COMMAND宏之后。这里的参数是指从浏览器传过来的各参数(即FORM域中各项的值)。DEFAULT_PARSE_COMMAND表示默认的命令。3END_PARSE_MAP标识结束parsemap定义。4',)


  • 编号:1700877448
  • 分类:标准规范
  • 软件: wps,office word
  • 大小:4页
  • 格式:docx
  • 风格:商务
  • PPT页数:44032 KB
  • 标签:

广告位推荐

相关标准规范更多>