为与Web服务器协同工作所开发的应用程序都有着特殊的要求。例如,你不能从一个URL中调用一个Notepad.exe实例并且希望在客户端的系统上看到一个记事本窗口。为了从IIS中与请求进行交互(并不是CGI),程序必须使用ISAPI编写。ISAPI是Internet服务器应用程序接口(InternetServerApplicationProgrammingInterface)的缩写。
有两种可执行的ISAPI:扩展和筛选器。
可以从一个URL中直接调用ISAPI扩展,如http://localhost/myisapi.dll。假设你已经在目录上配置了IIS,允许脚本和可执行程序,并且用户有执行NTFS的许可权限,则dll将会运行。IIS允许你指定应用程序是在进程内(作为Inetinfo部分)运行还是在进程外(作为IIS4.0上的MTX部分,或者作为IIS5.x部分的dllhost)运行。当一个应用程序在进程外运行时,Inetinfo就从问题中被隔离出来。如果应用程序出现故障,Web服务器也会出现故障。
ISAPI筛选器又是另一个内容。ISAPI筛选器能改变进入或离开IIS的数据流。因此,ISAPI筛选器有着非常强大的功能,能用来实现客户日志、验证或更改数据流。对IIS5.0来说,在ISAPI筛选器中实现的特性包括数据压缩、摘要验证和URLScan。
因为筛选器在IIS中扮演了一个如此重要的角色,所以它们总是作为Inetinfo部分运行在过程内。因此,正确的ISAPI筛选器结构对服务器的正常运行是必备的。你可能希望与Microsoft产品支持服务一起工作来确定问题,因为处理这种例外可能是一个较大的挑战。
基于这个考虑,有两个新技术可以使生活更加轻松,IIS6.0就是其中的一个。由于它是一个新的体系结构,所有的ISAPI筛选器都在进程外运行。这将使Web服务器从一个捉摸不定ISAPI筛选器中隔离开来,但这实际上并没有真正解决问题。为了解决这个问题,你可以考试使用.NET语言在ISAPI方面做一些工作。通使用C++设计ISAPI筛选器相比,使用.NET实现相同的功能要大为简单。