在了解Asp.net请求处理流程的过程中,个人认为有必要从源代码的角度来了解asp.net管道是怎么实现的。
在此之前大家有必要了解一些asp.net请求流程的基本东东,如ASP.NET 请求处理流程、Asp.net管道、ASP.NET管线与应用程序生命周期
我们大家都知道HttpRuntime主要的方法是
public static void ProcessRequest(HttpWorkerRequest wr)
而它最终调用的是
我们看到里面有这么一句
IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(context);用来获取HttpApplication,而HttpApplication实现了IHttpAsyncHandler接口public class HttpApplication
: IHttpAsyncHandler, IHttpHandler, IComponent, IDisposable,最后调用application的BeginProcessRequest方法。
首先我们来看看HttpApplicationFactory.GetApplicationInstance(context)都干了什么
哦,它调用了GetNormalApplicationInstance这个方法,
里面有一个比较关键的方法application.InitInternal(context, this._state, this._eventHandlerMethods);
这个方法关键的代码在于:
if (HttpRuntime.UseIntegratedPipeline)
{
this._stepManager = new PipelineStepManager(this);
}
else
{
this._stepManager = new ApplicationStepManager(this);
}
this._stepManager.BuildSteps(this._resumeStepsWaitCallback);
可能大家不怎么重视此代码,让我们来看看ApplicationStepManager
说简单一点这个类中的internal override void BuildSteps(WaitCallback stepCallback)方法就是为我们注册那19个管道事件,internal override void ResumeSteps(Exception error)就是依次执行此管道事件,而 steps.Add(new
HttpApplication.MapHandlerExecutionStep(app));是映射我们的handler
里面调用了_application.MapHttpHandler
在这里创建了IHttpHandlerFactory,进而创建了httphandler
而 steps.Add(new HttpApplication.CallHandlerExecutionStep(app));这句就是注册我们的handler,其源代码
大家看到
handler2.BeginProcessRequest(context, this._completionCallback, null);
handler.ProcessRequest(context);
这2句代码是不是很熟悉啊。
在让我们回头看看HttpApplication的BeginProcessRequest方法
看到这里我想我们大家都应该明白asp.net管道处理了吧。
看了asp.net管道的代码,我们不得不感叹一句asp.net源代码值得大家一读。
分享到:
相关推荐
首先,我们需要理解ASP.NET请求处理的基本流程。当一个HTTP请求到达Web服务器时,IIS(Internet Information Services)接收到这个请求,并将其传递给ASP.NET运行时,即HttpRuntime。HttpRuntime是ASP.NET的核心组件...
当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又...本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期。欢迎大家积极拍砖,共同学习,共同进步
4. **请求管道**: ASP.NET请求处理基于请求管道模型,这是一个由多个模块组成的链式结构。这些模块包括身份验证、授权、状态管理、异常处理等。每个模块都有机会处理或改变请求和响应。 5. **模块处理**: 请求进入...
ASP.NET Core处理管道的深入理解 ASP.NET Core 是微软推出的新一代Web开发框架,它具有高性能、跨平台和模块化等优点。在ASP.NET Core中,处理管道(Middleware Pipeline)是一个核心概念,它采用函数式编程思想来...
然后,通过创建HttpApplication类的实例,ASP.NET启动了请求处理管道。如果存在Global.asax文件,ASP.NET会实例化这个文件中定义的类,作为应用程序的全局对象,用于处理全局事件。 HttpApplication对象处理请求的...
ASP.NET Core 框架中,管道和拦截器是两个核心概念,对于 MVC 应用程序的执行顺序和请求处理过程起着至关重要的作用。在本文中,我们将详细介绍 ASP.NET Core 管道和拦截器的理解。 一、ASP.NET Core 管道 ASP.NET...
随后,.NET Framework中的ASP.NET运行时接管请求处理过程,直到生成响应为止。 #### 四、总结 通过深入了解ASP.NET的底层架构和工作原理,我们可以更好地理解ASP.NET如何高效地处理HTTP请求,并为开发高质量的Web...
IIS7.0 的集成管道模型为 ASP.NET 应用程序带来了显著的好处,包括统一的请求处理、灵活的模块管理和改进的事件触发机制。通过理解这些核心概念,开发者可以更好地设计和优化自己的 ASP.NET 应用程序,以满足不断...
ASP.NET 编程模型是微软开发的Web应用程序框架的核心组成部分,它定义了处理客户端请求的整个生命周期。在ASP.NET中,编程模型主要包括HttpApplication、HttpModule、HttpHandler和相关事件的执行顺序。以下是对这些...
接着,HttpApplication对象被创建,它是ASP.NET请求处理管道的核心,包含一系列预定义的事件和模块,用于执行请求生命周期中的各种任务,如身份验证、授权、错误处理等。 【HttpRuntime,HttpContext以及...
页面引擎负责处理用户请求,HTTP管道管理请求生命周期,配置系统允许自定义应用设置,控件库则提供了丰富的用户界面元素。 2. **ASP.NET页面生命周期** 一个ASP.NET页面从初始化到呈现经历了多个阶段,包括初始化...
当用户请求一个ASP.NET文件(如.aspx、.asmx等)时,IIS会将请求转发给aspnet_isapi.dll,这个扩展使用命名管道与ASP.NET辅助进程(aspnet_wp.exe)通信。IIS会验证用户身份并创建Windows访问令牌,如果启用匿名访问...
在ASP.NET Core中,中间件扮演着至关重要的角色,它是一个处理HTTP请求和响应的组件,按顺序执行,形成一个请求处理管道。本篇文章将深入讲解如何在ASP.NET Core中编写中间件来计算HTTP请求的处理时间。 首先,我们...
《Pro ASP.NET Core MVC 2 (7th) 中文版》是一本深入讲解ASP.NET Core MVC 2技术的专业书籍,适合C#开发者学习使用。该书涵盖了从基础到高级的多个方面,旨在帮助读者全面理解并掌握这个强大的Web开发框架。 ASP...