小 结
HTTP处理程序和HTTP模块是ASP.NET平台的构造块。ASP.NET包括若干预定义的处理程序和HTTP模块,但是开发人员可以编写自己的处理程序和模块来执行各种各样的任务。特别是HTTP处理程序,比普通的Web页面更快速,并可以在所有不需要状态维护和回发事件的环境中使用。例如,要在服务器上动态地生成图像,则一个HTTP处理程序比一个页面更有效。
在ASP.NET运行库环境的基本实现下发生的一切,都是由于HTTP处理程序而发生的。当我们调用Web页面或者Web服务方法时,一个合适的HTTP处理程序会来服务我们的请求。从最抽象的角度看,HTTP处理程序的行为非常像一个ISAPI扩展的行为。虽然这种相似性是有意义的,但却存在一个关键的区别:HTTP处理程序是.NET组件,因而被托管,并在CLR的运行库环境中执行。而CLR是由工作进程托管的。与此相反,ISAPI扩展是一个Win32库,可以寄宿于IIS进程内。在ASP.NET进程模型中,aspnet_isapi组件是一个真正的ISAPI扩展,它收集请求并把它们派遣给工作进程。ASP.NET在内部实现了一个类似于ISAPI的扩展性模型,其中HTTP处理程序担任IIS环境中的ISAPI扩展的角色。该模型在IIS 7.0中将会发生变化,到时在IIS环境中也会认可托管的HTTP模块和扩展。
HTTP模块相对于ISAPI筛选器,好比是HTTP处理程序相对于ISAPI扩展。HTTP模块擅长于执行许多低级任务,这些任务的关键要素是与请求/响应机制的紧密交互和集成。这些模块是拦截器,我们可以沿着一个HTTP包从Web服务器到ASP.NET运行库之间的路径放置它们。这些模块具有读写能力,它们可以筛选和修改输入和输出请求的内容。
我们在本书的前两章中多次谈到了配置文件,该是详细讨论web.config及其丰富架构的时候了,这正好是下一章要讨论的主要内容。
本章要点
þ HTTP处理程序和模块就像经典的ISAPI扩展和筛选器,但是它们是托管组件,可以提供一个更简单、更不容易出错的编程模型。
þ HTTP处理程序是一个负责处理请求的ASP.NET组件。总之,一个ASP.NET页面只不过是HTTP处理程序的一个实例。
þ HTTP处理程序是实现了IHttpHandler接口的类,负责处理请求的负荷。
þ HTTP模块是实现了IHttpModule接口的类,负责监听应用程序级事件。
þ 自定义的HTTP处理程序和模块必须通过web.config文件中专门的配置节,为服务器上的某个应用程序或所有应用程序进行注册。






