ISAPI开发介绍

         主要介绍ISAPI的作用、ISAPIIIS7上的配置、开发ISAPI的基本内容及使用VS 2008配置ISAPI DLL开发项目。

 

一、ISAPI介绍

 

缩写词=Internet Server Application Programming InterfaceMicrosoft所提的Internet serverAPI 

ISAPI分为两种:ISAPI extension ISAPI扩展)和 ISAPI filter ISAPI筛选器)。

1ISAPI 服务器扩展是可以被 HTTP 服务器加载和调用的 DLLISAPI扩展(extension)也称为 Internet 服务器应用程序 (ISA),用于增强符合 Internet 服务器 API (ISAPI) 的服务器的功能。ISAPI扩展(extension)通过浏览器应用程序调用,并且将相似的功能提供给通用网关接口 (CGI) 应用程序。

2ISAPI 筛选器是在启用 ISAPI 的 HTTP 服务器上运行的 DLL,用以筛选与服务器之间来回传送的数据。该筛选器注册事件的通知,例如登录或 URL 映射。当发生选定事件时,筛选器被调用,并且您可以监视及更改数据(在数据从服务器传输到客户端或相反的过程中)。可以使用 ISAPI 筛选器提供增强的 HTTP 请求记录(例如,跟踪登录到服务器的用户)、自定义加密、自定义压缩或其他身份验证方法。

 

二、ISAPI导出函数

 

1.    ISAPI扩展(ISAPI extension)导出函数:

1BOOL WINAPI GetExtensionVersion( HSE_VERSION_INFO  *pVer);
该函数是扩展DLL文件第一次被加载到站点处理进程时被调用。

2DWORD WINAPI HttpExtensionProc( LPEXTENSION_CONTROL_BLOCK  lpECB);
该函数是IIS服务每次触发ISAPI扩展时所调用的函数。也就是IIS服务增强服务时具体的实现内容通过本函数的调用。

3BOOL WINAPI TerminateExtension( DWORD  dwFlags);
该函数是ISAPI扩展DLL文件从进程中被载时调用一次。

2.    ISAPI 筛选器(ISAPI filter)导出函数

1BOOL WINAPI GetFilterVersion( PHTTP_FILTER_VERSION pVer); 
该函数是DLL筛选器第一次被加载到站点处理进程时被调用。

2DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc,DWORD notificationType,LPVOID pvNotification);
该函数用于响应注册在 GetFilterVersion 的形参PHTTP_FILTER_VERSION 中的dwFlags通知事件。根据所注册的通知事件进行相应的筛选处理。

3BOOL WINAPI TerminateFilter(DWORD dwFlags);
该函数是DLL筛选器被站点处理进程卸载时时所调用的处理。

 

三、使用Visual Studio创建ISAPI项目

 

Visual Studio 2008的版本及以后版本中,Visual C++的创建项目类别中,不再有关于ISAPI扩展和ISAPI筛选器的直接项目相关的创建选项。因此在VS2008中的Visual C++创建项目类别中,选择“Win32项目的项目类别,然后根据添加新项目向导中的应用程序类别下的“DLL”并选择空项目复选框来创建一个 空白的dll项目,并且由此配置成ISAPI扩展和ISAPI筛选器的dll项目。

1.       创建空白的DLL项目步骤

1)打开“Visual Studio2008”,选择VS界面主菜单上的文件(F)”菜单项,选择新建(N)”菜单项下的项目(P)”菜单,打开新建项目对话框。

2)选择新建项目对话框中的项目类型中的“Visual C++”树节点下的“Win32”节点;

3)在右边的模板框中,选择”Win32项目,然后填写相关的名称、位置、解决方案名称等信息后确认,打开“Win32应用程序向导对话框;

4)点击打开的“Win32应用程序向导对话框中的下一步,选择应用程序类别“DLL”,选择附加选项空项目确定完成新项目创建。

 

2.       配置空白DLL项目生成ISAPI扩展(ISAPI Extension) DLL

步骤1:右击项目,使用添加菜单下的新建项…”菜单项,使用添加新项添加C++文件;

步骤 2:在新建的cpp文件中,#include 并实现三个导出函的定义;

步骤 3:右击项目,使用添加菜单下的新建项…”菜单项添加模块定义文件,这时,模块定义文件会自动被配置到“DLL项目属性下的链接器”—“输入配置项中的模块定义文件下;

步骤 4:在定义模块文件中,编写导出函数定义;如:

LIBRARY    "MyISAPIExtension"

EXPORTS

           GetExtensionVersion       @1

           HttpExtensionProc           @2

                    TerminateExtension         @3

(备注:三个导出函数被导出的时候不能被VC++编译器导出后函数名发生改变,所以使用定义模块文件对三个文件进行导出。或许可以使用extern “C” l__declspec(dllexport)对三个导出函数进行导出操作;)

 

3.       配置空白DLL项目生成ISAPI筛选器(ISAPI Filter) DLL

(同配置生成ISAPI 扩展一样,只是将ISAPI扩展的包含的头文件及三个筛选器导出函数配置替换成ISAPI筛选器的头文件httpfilt.h及三个筛选器导出函数的配置。)

 

四、在IIS7上ISAPI 的应用设置

1  ISAPI扩展(ISAPI extension)的使用配置。

        预先配置:

        需要在IIS7” Internet信息服务(IIS)管理器上的全局配置中的“ISAPICGI限制添加设置允许ISAPI模块文件路径;或设置“ISAPI和 CGI限制配置页面上右上角的编辑功能设置,选择允许未指定的ISAPI模块以确保要添加的ISAPI模块不会被禁用。

1       文件扩展名映射处理配置

1)         打开IIS7” Internet信息服务(IIS)管理器,点击所要配置的站点;

2)         在打开的站点配置主页的IIS组中选择处理程序映射,打开处理程序映射的配置页;

3)         在管理器窗口的右上角有个操作栏,选择添加模块映射。(该站点必须是绑定集成管道的应用程序池);

4)         添加模块映射窗口的模块中选择“IsapiModule”,然后选择dll文件,并填写相应的配置信息;

5)         点击请求限制…”按钮,选择请求限制对话框中的访问选项卡下的执行单选项,然后确定;

6)         最后确认添加映射模块。

2       URL调用ISAPI扩展(ISAPI extension)方式设置,
调用如,在浏览器中直接输入http://www.bizcn.com/MyIsapiExt.dll 进行isapi扩展的调用

如果按照预选配置的内容配置完”ISAPICGI限制的配置内容之后,按以下步骤进行操作:

1)       打开IIS7” Internet信息服务(IIS)管理器,点击所要配置的站点;

2)       选择站点配置主页下的IIS配置组中的处理程序映射,打开站点的处理程序映射;

3)       选择站点的处理程序映射配置页的右边操作栏中的编辑功能权限,打开编辑功能权限对话框;

4)       编辑功能权限对话框中,选择脚本执行两个复选框。

2  ISAPI筛选器(ISAPI filter)的使用配置

        选择要添加筛选器的站点,在站点的配置主页,选择“IIS”分组中的“ISAPI筛选器。然后,在“ISAPI筛选器的配置页面中右边的操作栏中点添加…”;选择要配置的筛选器的DLL文件,填写相关的配置信息,然后确认添加。

 (需要非常注意的一点是:你需要非常注意你的IIS的应用程序池帐户是否有对于ISAPI所在路径及ISAPI所要使用到的资源的各种权限。)

五、调试ISAPI  

1、       调试操作步骤 

        因为ISAPI是一个dll文件,而且ISAPI是由IIS应用程序池进程调用的。

        在IIS6 IIS7的应用程序池的进程名称都是w3wp.exe;我们需要在单个应用程序池的机子上部署环境进行调试。避免调试时,多个应用程序池的一样的 w3wp.exe进程名称,导至不必要的调试麻烦。以下是进行ISAPI进行调试的操作步骤(ISAPI扩展和ISAPI 筛选器的调试方式一样):

步骤1 :根据isapi的应用设置设置好要测试的isapidll

步骤2 :在浏览器的地址栏中输入配置测试isapi dll的站点的URL,然后过行一次访问,以便站点响应处理进程加载isapi dll文件。(如果是URL的方式访问isapi扩展的话,就要输入完整的isapi扩展dll访问的url);

步骤 3 :打开要测试的ISAPIdll项目;

步骤 4 :选择主菜单的工具菜单下的附加到进程…”的菜单项,弹出附加到进程对话框;

步骤 5 :选择附加到进程对话框下边的显示所有会话中的进程复选框,然后按刷新按刷;

步骤 6 : 在可用进程的列表中选择进程为:w3wp.exe的进程,最后按附加,将w3wp.exe进程附加到项目调试中;

步骤 7 :然要测试的ISAPI dll的函数HttpExtensionProc(或HttpFilterProc)内打上断点,再次刷新刚才在浏览器地址栏中输入的URL地址;这时程序就会停在打上断点的地方。

 

2、不能调试的可能情况:

a)         如果所编写的ISAPI中出现异常错误;可能直接导致应用程序停止进行。

b)         导出函数不是按原来的函数名导出,可能是编译的时候被VC++编译器改变函数名了。

c)         导出函数没有被正常导出。可以使用查看的dll导出函数工具进行查看导出的函数。

         ……


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部