分类:
2010-09-10 15:55:09
ASP.NET HTTP 处理程序是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为“终结点”)。最常用的处理程序是处理 .aspx 文件的 ASP.NET 页处理程序。用户请求 .aspx 文件时,页通过页处理程序来处理请求。
ASP.NET 页处理程序仅仅是一种类型的处理程序。ASP.NET 还包括其他几种内置的处理程序,例如用于 .asmx 文件的 Web 服务处理程序。
ASP.NET 中的内置 HTTP 处理程序
我们可以打开 %Windows%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config 文件(framework 2.0 的配置文件),找到httpHandlers节点查看一下内置 HTTP 处理程序,所有HTTP 处理程序都是实现 IHttpHandler,在 httpHandlers 配置节里我们可以发现很多默认的实现 IHttpHandler, IHttpAsyncHandler 接口的处理程序,动态地创建以处理针对 ASP.NET 文件的请求。当然我们也可以发现很多工厂类,如 PageHandlerFactory 类,工厂类的作用是提供具体的HTTP 处理程序。
比如: <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
上面的 add配置节作用是对于 aspx 所有(path="*.aspx")页的所有(verb="*" GET/POST/TRACE/DEBUG..)请求都交给PageHandlerFactory 类返回的HTTP处理程序的实例,PageHandlerFactory 类是一个工厂类它实现 以提供 ASP.NET 文件的默认 HTTP 处理程序。当然如果需要你完全可以创建你自己的实现 IHttpHandlerFactory 接口的类,具体实现 。
如果您需要进行特殊处理(可以在应用程序中使用文件扩展名进行标识),可以创建自定义 HTTP 处理程序。例如,下面的方案就很好地利用了自定义 HTTP 处理程序:
u RSS 源 若要为站点创建 RSS 源,可以创建一个可发出 RSS 格式 XML 的处理程序。然后将您应用程序中的 .rss 扩展名(举例)绑定到此自定义处理程序。当用户向站点发送以 .rss 结尾的请求时,ASP.NET 将调用您的处理程序来处理请求。
u 图像服务器 如果希望 Web 应用程序能够提供不同大小的图像,可以编写一个自定义处理程序来调整图像大小,然后将调整后的图像作为处理程序的响应返回给用户。
创建自定义 HTTP 处理程序若要创建一个自定义 HTTP 处理程序,需要以下三个步骤:
1. 一个 HTTP 处理程序类的代码。可以创建一个可实现 IHttpHandler 接口的类以创建同步处理程序,或者创建一个可实现 IHttpAsyncHandler 的类以创建异步处理程序。两种处理程序接口都要求您实现 IsReusable 属性和 ProcessRequest 方法。
2. Web.config 文件中注册该处理程序并将自定义的文件扩展名映射到该处理程序所需的元素。
3. 在 Internet 信息服务 (IIS) 中将自定义文件扩展名映射到 ASP.NET。
异步 HTTP 处理程序
利用异步 HTTP 处理程序可以启动一个外部进程(例如对远程服务器的方法调用),然后继续处理程序的处理工作,而无需等待外部进程结束。在异步 HTTP 处理程序的处理期间,ASP.NET 将通常用于外部进程的线程放回线程池中,直到处理程序收到来自外部进程的回调。这样可以避免阻止线程,并大幅改善了性能,因为一次所能执行的线程数量是有限的。如果许多用户都在请求依赖于外部进程的同步 HTTP 处理程序,那么操作系统可能很快就会用完所有线程,因为大量线程被阻止,正在等待外部进程。创建异步处理程序时,除了实现 ,还必须实现 BeginProcessRequest 以启动异步调用来处理单个 HTTP 请求。还必须实现 EndProcessRequest 方法,以便在进程结束时运行清理代码。