ASP.NET 2.0 执行原理

看了很多的文章,今天按照自己的理解编排了一下执行原理,如有问题请大家指出。

概论:

当用户请求服务器(IIS)上的某个 .aspx页面时,IIS本身不做处理(IIS只处理后缀是.htm.html的静态页面,其他后缀文件不直接处理),而是交给IIS上的ISAPI过滤器来处理。

ISAPIInternet Server Application Programming Interface)作为一种可用来替代CGI的方法,是由微软提出的Web服务器上的API标准。ISAPIWeb服务器结合紧密,功能强大,能够获得大量的信息,因此利用ISAPI可以开发出灵活高效的Web服务器增强程序。】

把这个请求转交给asp.net_isapi.dll,而它则会通过一个Http Pipeline的管道,将这个http请求发送给asp.net_wp.exe进程,然后Framework就会通过HttpRuntime来处理这个Http请求,处理完毕后将结果返回给客户端。

 

详解:

完整的http请求在asp.net framework中的处理流程:

HttpRequest-->inetinfo.exe->ASPNET_ISAPI.DLL-->HttpPipeline-->ASPNET_WP.EXE-->HttpRuntime-->HttpApplicationFactory-->HttpApplication-->HttpModule-->HttpHandlerFactory-->HttpHandler-->HttpHandler.ProcessRequest()

看到这个流程是很复杂,但是对于普通的编程来说,重点在理解HttpModuleHttpHandler

 

HTTPModule:(HTTP模块)

HTTPModule是一个在每次针对应用程序发出请求时调用的程序集。HTTP 模块作为 ASP.NET 请求管道的一部分调用,它们能够在整个请求过程中访问生命周期事件。HTTP 模块使你可以检查传入和传出的请求并根据该请求进行操作。

 

HTTPModule通常具有以下用途:

1、安全: 因为你可以检查传入的请求,所以 HTTP 模块可以在调用请求页、XML Web services 或处理程序之前执行自定义的身份验证或其他安全检查。在以集成模式运行的 Internet 信息服务 (IIS) 7.0 中,可以将 Forms 身份验证扩展到应用程序中的所有内容类型。

2、统计信息和日志记录: 因为 HTTP 模块是在每次请求时调用的,所以,你可以将请求统计信息和日志信息收集到一个集中的模块中,而不是收集到各页中。

3、自定义的页眉或页脚: 因为你可以修改传出响应,所以可以在每一个页面或 XML Web services 响应中插入内容,如自定义的标头信息。

ASP.NET 使用模块来实现各个应用程序功能,其中包括 Forms 身份验证、缓存、会话状态和客户端脚本服务。

 

模块必须经过注册才能从请求管道接收通知。注册 HTTP 模块的最常用方法是在应用程序的 Web.config 文件中进行注册

ASP.NET 创建表示你的应用程序的 HttpApplication 类的实例时,将创建已注册的任何模块的实例。在创建模块时,将调用它的 Init 方法,并且模块会自行初始化。在模块的 Init 方法中,可以订阅各种应用程序事件(如 BeginRequest EndRequest),这可以通过将事件绑定到模块中的方法来完成。

 

 

当这些应用程序事件被引发时,将调用模块中的相应方法。该方法可以执行所需的任何逻辑,如检查身份验证或记录请求信息。在事件处理过程中,模块能够访问当前请求的 Context 属性。这使你可以将请求重定向到其他页、修改请求或者执行任何其他请求操作。例如,如果模块检查身份验证,则在凭据不正确的情况下,模块可能重定向到登录页或错误页。否则,当模块的事件处理程序完成运行时,ASP.NET 会调用管道中的下一个进程。这可能是另一个模块,也可能是用于该请求的 HTTP 处理程序(如 .aspx 文件)。

 

HTTP 模块与 Global.asax 文件

可以在应用程序的 Global.asax 文件中实现模块的许多功能,这使你可以响应应用程序事件。但是,模块相对于 Global.asax 文件具有如下优点:模块可以进行封装,因此可以在创建一次后在许多不同的应用程序中使用。通过将它们添加到全局程序集缓存并将它们注册到 Machine.config 文件中,可以跨应用程序重新使用它们。

 

 

HttpHandler:(HTTP 处理程序)

HttpHandler是响应对 ASP.NET Web 应用程序的请求而运行的过程(通常称为“终结点”)。最常用的处理程序是处理 .aspx 文件的 ASP.NET 页处理程序。用户请求 .aspx 文件时,页通过页处理程序来处理请求。你可以创建自己的 HTTP 处理程序将自定义输出呈现给浏览器。

 

自定义 HTTP 处理程序通常具有以下用途:

 

1RSS源:若要为网站创建 RSS 源,可以创建一个可发出 RSS 格式 XML 的处理程序。然后可以将文件扩展名(如 .rss)绑定到此自定义处理程序。当用户向站点发送以 .rss 结尾的请求时,ASP.NET 将调用您的处理程序来处理请求。

 

2、图像服务器:如果希望 Web 应用程序能够提供不同大小的图像,可以编写一个自定义处理程序来调整图像大小,然后将调整后的图像作为处理程序的响应发送给用户。

 

ASP.NET 中的内置 HTTP 处理程序

ASP.NET 根据文件扩展名将 HTTP 请求映射到 HTTP 处理程序。每个 HTTP 处理程序都可以处理应用程序中的单个 HTTP URL URL 扩展名组。ASP.NET 包括几种内置的 HTTP 处理程序:

ASP.NET 页处理程序 (*.aspx)

Web 服务处理程序 (*.asmx)

泛型 Web 处理程序 (*.ashx)

跟踪处理程序 (trace.axd)

 

当创建一个类文件作为 HTTP 处理程序时,该处理程序可以响应尚未在 IIS ASP.NET 中映射的任何文件扩展名。例如,如果要创建用于生成 RSS 源的 HTTP 处理程序,则可以将您的处理程序映射到 .rss 文件扩展名。为了使 ASP.NET 了解为您的自定义文件扩展名使用哪个处理程序,在 IIS 中必须将该扩展名映射到 ASP.NET。然后在应用程序中必须将该扩展名映射到自定义处理程序。

 

默认情况下,ASP.NET 将文件扩展名 .ashx 映射到 HTTP 处理程序。如果将 @ WebHandler 指令添加到某个类文件,则 ASP.NET 会自动将 .ashx 文件扩展名映射到默认的 HTTP 处理程序。这与在使用 @ Page 指令时,ASP.NET .aspx 文件扩展名映射到 ASP.NET 页处理程序的方式类似。因此,如果您创建具有文件扩展名 .ashx HTTP 处理程序类,该处理程序将自动注册到 IIS ASP.NET

 

如果要为处理程序创建自定义文件扩展名,则必须使用 IIS ASP.NET 显式注册该扩展名。不使用 .ashx 文件扩展名的优点在于处理程序可为不同的扩展名映射重用。例如,在一个应用程序中,自定义处理程序可能响应以 .rss 结尾的请求。在另一个应用程序中,该自定义处理程序可能响应以 .feed 结尾的请求。再举一例,该处理程序可能映射到同一应用程序中的两个文件扩展名,但可能基于扩展名创建两个不同的响应。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值