📄 210004.htm
字号:
<html><body><span id=Layer1><a name=210004><font color=#3e70d7 face=arial size=5><b>了解ISAPI</span><span id=Layer2></b></font><p><font size=2 color=#3c3c3c face=arial>比起IIS可用的其它选择,使用ISAPI建立的应用程式能够提供最佳的执行效能。因为程式设计师通常都使用非常低阶的语言,一般都使用C++,所以以ISAPI为基础的程式码能够直接存取Windows 2000提供的所有服务。对於某些问题来说,ISAPI DLL恰是正确的选择。若使用ISAPI,程式设计师可以建立扩充程式(Extension)或筛选器(Filter)。本章先讨论以上两者较常被使用的扩充程式,然後再讨论筛选器。</span><span id=Layer3></font></p><p><font size=2 color=#3c3c3c face=arial>ISAPI应用程式可以是一个扩充程式(Extension)或是一个筛选器(Filter)</span><span id=Layer4></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ISAPI应用程式可以是一个扩充程式(Extension)或是一个筛选器(Filter)</span><span id=Layer5></font></p><hr><p><font size=2 color=#3c3c3c face=arial>扩充程式(Extension)典型的用法展示於图10-5。浏览器传送一个HTTP要求到IIS,如GET,指明一个指向ISAPI扩充程式的URL。若ISAPI扩充程式尚未载入,IIS便找寻这个DLL并将之载入到记忆体。然後将伴随要求而来的参数传递到扩充程式,最後再取得答覆。传送到浏览器的结果将显示给使用者。</span><span id=Layer6></font></p><br><center><a target=_new href=imagesh/10-5.gif><img border=0 src='imagesl/10-5.gif'></a></center></span><span id=Layer7><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b> 图10-5</span><span id=Layer8> </b></font>一个ISAPI DLL扩充程式可在第一个要求到达时载入,然後保留在记忆体以处理未来的要求。</span><span id=Layer9></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>ISAPI扩充程式可以载入IIS的行程中,或载入另外的行程,全看如何进行设定而决定。照例,速度与可靠性之间是两难的,将ISAPI DLL载入记忆体能够快速地存取,但DLL中的臭虫可让整个Web伺服器当掉。然而一旦载入之後,不管是载入IIS的行程或是分开的行程,ISAPI扩充程式预设会保持载入的状态,直到执行它的行程关闭为止。</span><span id=Layer10></font></p><p><font size=2 color=#3c3c3c face=arial>扩充程式处理从客户端而来的特定要求</span><span id=Layer11></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>扩充程式处理从客户端而来的特定要求</span><span id=Layer12></font></p><hr><p><font size=2 color=#3c3c3c face=arial>对於从客户端接收到的所有要求来说,IIS建立一个称做扩充程式控制区块(extension control block)的资料结构。然後将从HTTP要求接收到的资讯填入这个资料结构。这个资讯包含了客户端指定的HTTP method (如GET或POST),出现在要求上的查询字串(Query String,也就是浏览器传送的URL末端「?」号之後的资讯)...等等。一旦完成这个动作,当呼叫到扩充程式提供的最重要的函数HttpExtensionProc时,IIS便将这个资料结构当做是一个唯一的参数,传送到IIS 扩充程式。</span><span id=Layer13></font></p><p><font size=2 color=#3c3c3c face=arial>IIS传送客户端提供的资讯到一个扩充程式,然後将扩充程式回传的资讯传送到客户端</span><span id=Layer14></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>IIS传送客户端提供的资讯到一个扩充程式,然後将扩充程式回传的资讯传送到客户端</span><span id=Layer15></font></p><hr><p><font size=2 color=#3c3c3c face=arial>扩充程式(Extension)中的程式码检查收到的延伸程式控制区块,然後执行任何它希望的行动。扩充程式可以做所有的事以便满足这个客户端的要求,包含存取一个或多个资料库,建立或使用COM物件等等。若要将回应传送到客户端,ISAPI扩充程式便呼叫IIS提供的一个回呼(callback)函数,WriteClient。不管扩充程式传送的资讯为何,透过这个函数回传到客户端的资讯都是采用HTTP的协定。</span><span id=Layer16></font></p><p><font size=2 color=#3c3c3c face=arial>筛选器(Filter)很类似扩充程式,不过也有许多不同点。ISAPI筛选器与扩充程式的相同点在於ISAPI筛选器是一个DLL,载入IIS的行程中执行。而不同点在於筛选器载入的时间点是Web伺服器启动时,保留在记忆体,直到行程关闭为止。当一个筛选器载入时,它会将能接受的事件清单传送给IIS,包含授权给使用者的事件、传送一个回应给使用者、撰写一笔日志记录...等等。任何筛选器注册感兴趣的事件发生後,IIS呼叫筛选器中的HttpFilterProc函数,传递事件的相关资讯,筛选器便可以参与事件的处理。举例来说,筛选器可以执行特殊的验证动作,或资料加密,或者可以在IIS传送的每一个网页加上表尾。但过度使用ISAPI筛选器会降低执行效能,这是因为它会干扰许多要求,不过对於某些问题而言,它们是相当吸引人的解决方案。</span><span id=Layer17></font></p><p><font size=2 color=#3c3c3c face=arial>每当注册的事件触发时,便自动呼叫筛选器(filter)</span><span id=Layer18></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>每当注册的事件触发时,便自动呼叫筛选器(filter)</span><span id=Layer19></font></p><hr><p><font size=2 color=#3c3c3c face=arial>与CGI或ASP做个比较,撰写一个ISAPI扩充程式是一个困难重重的工作。首先,使用C++就比使用VBScript撰写ASP网页还具备更大的挑战。同样的,ISAPI提供的服务较少,如先前所提及的,没有内建对session的支援。再者,一个ISAPI 扩充程式必须同时处理多条执行绪,因为IIS自己就包含了多条执行绪,因此再次呼叫HttpExtensionProc函数之前,它不会等待呼叫到HttpExtensionProc的函数回传便可以继续处理其它使用者发出来的要求。一般而言,可以这麽说,IIS应用程式的帝国可以使用ASP建立,而ISAPI保留给真正要求高效能的案例使用。</span><span id=Layer20></font></p><p><font size=2 color=#3c3c3c face=arial>撰写ISAPI扩充程式与筛选器可能相当困难</span><span id=Layer21></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>撰写ISAPI扩充程式与筛选器可能相当困难</span>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -