zoukankan      html  css  js  c++  java
  • ISAPI Extension概览

    ISAPI extension运行在IIS上的真实的应用程序, 它可访问有IIS提供的所有功能. 一个强大的ISAPI的例子: ASP页面就是通过ISAPI extension来处理的. 总的来说, 客户端可以像访问静态HTML文件或者是动态的ASP文件一样的访问ISAPI extensions.

     

    ISAPI extension被实现为DLL文件, 这些DLL文件会被由IIS控制的进程所加载. 跟ASP和HTML页面一样, IIS使用DLL文件的虚拟路径来映射文件系统上的ISAPI extension到由IIS服务的URL命名空间上.

     

    Extensions和filters是通过ISAPI开发的两种类型的应用程序. ISAPI extension会在被请求到的时候运行, 这跟其他的静态HTML页面和动态的asp页面没有两样.  由于ISAPI应用程序都是编译过的代码, 它们的处理速度要比ASP文件和其他调用COM+组件的文件要快得多.

     

    ISAPI filter和ISAPI extension只能使用C或C++开发. Visual Studio包含可以加速ISAPI开发的向导(wizards).

     

    应用程序映射- Application Mappings

    ==================

    应用程序映射(或脚本映射)在Web Server上与Windows上的文件关联是等效的. 比如说, 在Windows中, 当你打开一个以'.txt'结尾的文件时, 问就爱你通常会被Notepad打开, 因为TXT文件被Windows映射到了Notepad.exe上.

     

    在IIS中, ASP功能是被包含在叫做ASP.DLL的ISAPI extension中的. 在IIS Server上被请求的任何以.asp结尾的文件都被映射到ASP.dll上, ASP.DLL会被指配来在客户端的窗口展现输出之前来处理文件.

     

    一个客户端用下面的方式请求了ISAPI Extension:

    http://Server_name/ISAPI_name.dll/Parameter

    要请求一个ASP文件, 客户端可以请求一个类似http://Server_name/ASP.dll/File_name.asp 的URL, 因为ASP文件是由名为%windir%\system32\inetsrv\ASP.dll的ISAPI extension处理的. 然而, 为了简化ASP的请求, IIS使用了一个脚本映射, 把.asp文件扩展名跟ASP.DLL关联起来. 当收到类似http://Server_name/File_name.asp 请求的时候, IIS运行ASP.DLL这个isapi extension来处理这个请求. 很多运行在IIS上的应用程序实际上都是ISAPI extension, 他们都有各自的文件扩展名的映射.

    ISAPI Extension处理流程- ISAPI Extension Processing Sequence

    ===================

    1. 如果DLL不在内存中, 那么IIS会加载DLL到内存中. DLL加载起来后, Windows自动地调用DLL的入口/出口函数(通常是DllMain函数). IIS然偶调用extension的GetExtensionVersion 入口函数.

    2. IIS对到来的请求执行一些少量的预处理.

    3. IIS创建并填充EXTENSION_CONTROL_BLOCK 结构, 用来传递请求数据和回调函数指针给extension.

    4. IIS调用ISAPI extension的HttpExtensionProc函数, 传递一个指向EXTENSION_CONTROL_BLOCK 结构的指针, 这个EXTENSION_CONTROL_BLOCK 结构是专门为这个请求而创建的.

    5. ISAPI extension执行一些它被设计的动作: 比如说, 从客户端读取更多的数据(与POST操作一样), 或者写入headers和数据到client端.

    6. Extension会通过离开HttpExtensionProc 函数来通知IIS它已经完成了对请求的处理. 对于同步操作, 函数返回HSE_STATUS_SUCCESS; 对与异步操作, 返回代码是HSE_STATUS_PENDING. 关于异步操作的更多信息, 请参考Asynchronous I/O Processing

    7. IIS对与请求所使用的连接执行清理动作, 在清理之后, 如果Keep-Alive功能没有开启的话, 它会关闭连接.

    8. 一旦ISAPI extension不再被需要了, IIS会调用TerminateExtension函数, 前提是如果extension提供了这个函数. 如果IIS被配置为缓存ISAPI extensions, 那么TerminateExtension就不会被调用, 直到IIS web server关闭或者重启时才调用它.

    ISAPI和CGI

    ====================

    关于Internet Server Application Programming Interface (ISAPI)模型和Common Gateway Interface (CGI)模型的对比, 请见MSDN原文.

    参考资料:

    ISAPI Extension Overview

    http://msdn.microsoft.com/en-us/library/ms525172%28VS.90%29.aspx

  • 相关阅读:
    uvm_misc——杂货铺(miscellaneous)
    23种设计模式及其应用场景
    Hadoop TextInputFormat源码分析
    java字符串替换函数高效实现
    hadoop HA 之 QJM
    中文分词词性对照表
    计算两个字符串编辑距离
    java 图片处理
    zookeeper数据迁移
    正则表达式
  • 原文地址:https://www.cnblogs.com/awpatp/p/1770803.html
Copyright © 2011-2022 走看看