多语言展示
当前在线:691今日阅读:11今日分享:19

ISAPI扩展架构

ISAPI扩展架构本主题概述ISAPI扩展架构特征。ISAPI进程和线程在ISAPI模型中,不像其它网站内容开发技术,为每个http server请求要求独立进程。ISAPI使用线程在进程中隔离工作项目。由于IIS采用多线程进行同步工作,比基于进程隔离CGI模型或其它模型更有效利用系统资源。通过ISAPI扩展每个客户端请求启动一个EXTENSION_CONTROL_BLOCK数据结构建立。创建和维护一个数据结构比启动一个新进程更容易且更快。EXTENSION_CONTROL_BLOCK结构和扩展通常以iis方式运行在相同进程空间,所以服务器可以更快地处理请求并大量容纳它们。与其它dll一样,服务器应用程序必须线程安全。由于很多客户端同时运行相同函数,当修改全局或静态变量时代码必须遵循安全过程。ISAPI扩展通过使用适当同步技术保证线程安全。例如创建临界区和信号量。有关编写线程安全dll的更多令牌,请参阅 Windows DDK 中的 同步技术。进程隔离支持IIS支持ISAPI DLL和脚本的进程隔离。它使用自定义、高速方法在服务器进程和代理进程间为dll集群建立通信网络,从而提供高性能鲁棒性。ISAPI扩展要么以dll形式实施,要么被IIS进程加载,若它们一部分是进程外应用程序,分离为一个单独进程。如asp和html页面一样,IIS通过设置iis扩展将url命令空间映射到dll文件虚拟地址系统。默认情况下,IIS 配置为缓存 ISAPI 扩展。当收到请求映射到 ISAPI 扩展时,首先检查看是否已经加载该文件。如果它不是 IIS 将加载它。一旦这样做,全部请求将由扩展管理。用IIS充当高效的中介和辅助。ISAPI可以控制整个命名空间。如果你使用星号(*)设置你的扩展,所有命名空间请求将由指定ISAPI处理。单独服务器进程通过隔离ISAPI扩展在单独服务器进程中运行。这样做,当创建一个扩展时,可以在iis用户界面中选择单独的内存空间选项。一此ISAPI dll扩展可能不适合运行在单独进程中,主要有以下原因: o 若一个ISAPI DLL实例在一个进程中以独占方式打开文件,文件访问会中止。锁定它以被另一个进程中相同ISAPI DLL另一个实例使用。 o 一个ISAPI运行在进程外比运行在进程内安全密钥不同。 o ISAPI扩展函数特性和过滤器函数特性结合在一个单独DLL中不能工作,若你标记扩展,将在一个单独进程中运行,由于ISAPI DLL实例不能同时存在Inetinfo.exe(过滤器在进程内)和DLLHost.dll(扩展在进程外)。IIS 5.0 版本及以上版本检测到ISAPI DLL被同时配置为扩展和过滤器时,将强制在进程内运行扩展。 o 由于ISAPI需要在DLLHost.dll和Inetinfo.exe间跨进程通信可能会降低性能。此,若ISAPI DLL使用自定义缓存方案,每个DLL实例都有它自己的缓存,使用内存。最终,ISAPI DLL初始化期间很长,即(对于每个进程)每个DLL实例将发生初始化。 o 若ISAPI DLL被配置运行在单独进程内,将发生意外行为。ISAPI每个不同实例,将不能识别对方。若服务器正在运行IIS 5.0隔离模型,您可以使用元数据库属性InProcessIsapiApps 指定所有ISAPI DLL列表运行在相同服务进程中。 这些DLL的请求默认传送到应用程序根目录(/ LM/W3SVC)。 默认应用程序通知进程以保证所有这些请求运行。 安装程序将创建InProcessIsapiApps 属性,加载Ssinc.dll和Httpodbc.dll到进程中,它必须以IIS方式在相同进程内运行。 有关IIS 5.0隔离模型的详细信息,请参阅下面的ISAPI下IIS进程模型。注释:ISAPI DLL中一个软件错误将导致服务器停止。因此,除非您确信您的DLL将永远不会耗尽的进程,否则不要把它添加到这个列表。ISAPI和进程回收从IIS 6.0开始,IIS 支持两种不同应用程序隔离模式:工作进程隔离模式和IIS 5.0 隔离模式。IIS7.0中支持两种管道模式:集成管道模式和先前版本的经典管道模式。工作进程隔离模式可以配置成回收进程。当应用程序回收时,会话状态将丢失。若有多个实例,回收期间可能导致错误发生。建议ISAPI应用程序在外部保存状态,如一个SQL数据库。若一个ISAPI应用状态管理代码不能修改,IIS应进行配置防止状态运行时丢失。包括禁止回收功能和工作进程空闲超时。禁止这些功能比选择在IIS中使用IIS 5.0隔离模型好多了。此外,若一个ISAPI在应用程序池中使用HSE_REQ_REPORT_UNHEALTHY结构,建议禁用ping功能。如asp、asp.net,因为工作进程回收后会发送ping。ISAPI扩展多个实例会导致问题,在执行环境中不能处理具体代码。例如,若一个ISAPI应用在实施它自己一个日志文件,它必须能够使用不同凭据或锁定文件处理日志文件以被它自己另外进程的线程访问。若应用使用内核对象,常用的内核同步对象有事件(event)、信标(semaphore,亦称信号量)和互斥量(mutex),它需要考虑这些对象在其它进程内不一定是它们自己线程的信号量。详细的信息,请参阅 IIS 进程回收。IIS 5.1和更早版本:工作进程隔离模型,进程回收,应用程序缓冲池是不可用的。支持 HTTP 1.1ISAPI支持HTTP 1.1。 管道请求和传送编码标头两种技术被ISAPI扩展和过滤器开发支持。传送编码标头已经有效被客户端转化应用到邮件正文发送中。 例如,如果客户端支持HTTP 1.1,IIS可以指定传输编码值为“chunked”。当chunked转化应用,该消息被分成大小不等的块,其中每个都包含头字段自己指定的规模指标和可选的页脚。 分块比非分块内部应用程序处理连接更有效率,尤其是多流数据源和非常大的数据集。
推荐信息