IIS托管管道模式的集成和经典比较
IIS改善和发展的主要因素是IIS已经成为应用程序(特别是ASP.NET)的支持平台。通过将ASP.NET直接集成到IIS 7.0中,IIS 7.0进一步推动了平台的发展。从管理功能到身份验证,乃至请求处理管道本身,相关功能都已经集成到IIS 7.0之中。将管道集成到IIS 7.0中具有两个好处:一是为基于ASP.NET的Web应用程序及IIS 7.0扩展提供了更好的性能,二是通过使用托管代码获得了更好的控制能力。
ASP.NET的性能之所以能够得到改善,是因为ASP.NET应用程序不再需要退出管道并加载ISAPI进程来处理ASP.NET代码,然后再返回到管道为客户提供响应信息。为了保持应用程序的兼容性,IIS 7.0仍然支持经典管道模式,但是,现在应该尽可能地使用新的集成管道。
1. 经典模式
在IIS 6.0中,ASP.NET扮演了一个ISAPI过滤器的角色,也就是说,请求退出管道后,由aspnet.dll进行处理,然后返回到管道进行进一步处理,最终将响应返回给客户端。如图2-4所示,在IIS 6.0中,一个客户端的HTTP请求将沿着管道移动,直到确定了一个处理程序,如果这个文件是一个ASP.NET文件,那么它就转入ASP.NET ISAPI过滤器,通过ISAPI的处理,在将一个HTTP响应返回给客户端之前,这个请求还将返回管道。IIS 7.0继续提供了这种模式,称为经典模式。
2. 集成管道模式
利用IIS 7.0中的集成管道,开发人员可以将自己的托管代码在管道中集成为一个模块。在先前版本的IIS中,这需要开发ISAPI过滤器或应用程序,对多数开发人员而言,这是一项难度很高的工作。在IIS 7.0中,可以用托管代码开发模块,并且模块可以作为请求管道的组成部分。如图2-5所示,利用IIS 7.0的集成管道模式,可以在管道中处理ASP.NET文件,这样可以在处理过程的任意一个步骤使用ASP.NET代码。因为ASP.NET已经集成到管道中,所以,诸如身份验证之类的ASP.NET功能也可以用于处理非ASP.NET内容。每个请求都可以由IIS和ASP.NET进行处理,而不必考虑其所属类型。
与ASP.NET集成也意味着可以使用ASP.NET身份验证对任何文件、文件夹,以及IIS 7.0的功能,从而有效地进行访问控制。在IIS 7.0出现之前,因为ASP.NET需要退出管道才能完成处理工作,所以任何不是由ASP.NET处理的文件,如HTML、Perl,甚至图形图像等内容,都无法由ASP.NET进行处理,因此也不会由ASP.NET身份验证机制来进行访问控制。所以,就必须使用Windows集成的身份验证或自定义的身份验证机制对不是由ASP.NET处理的文件进行访问控制。利用集成管道,可以大大简化身份验证方法的开发工作。