`
yiheng
  • 浏览: 156728 次
社区版块
存档分类

Asp.net请求处理之 管道处理

 
阅读更多

在了解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请求处理之管道处理介绍

    首先,我们需要理解ASP.NET请求处理的基本流程。当一个HTTP请求到达Web服务器时,IIS(Internet Information Services)接收到这个请求,并将其传递给ASP.NET运行时,即HttpRuntime。HttpRuntime是ASP.NET的核心组件...

    Asp.net请求的处理过程

    当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又...本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期。欢迎大家积极拍砖,共同学习,共同进步

    asp.net架构基础知识--asp.net请求的处理过程

    4. **请求管道**: ASP.NET请求处理基于请求管道模型,这是一个由多个模块组成的链式结构。这些模块包括身份验证、授权、状态管理、异常处理等。每个模块都有机会处理或改变请求和响应。 5. **模块处理**: 请求进入...

    【ASP.NET编程知识】ASP.NET Core处理管道的深入理解.docx

    ASP.NET Core处理管道的深入理解 ASP.NET Core 是微软推出的新一代Web开发框架,它具有高性能、跨平台和模块化等优点。在ASP.NET Core中,处理管道(Middleware Pipeline)是一个核心概念,它采用函数式编程思想来...

    asp.net生命周期

    然后,通过创建HttpApplication类的实例,ASP.NET启动了请求处理管道。如果存在Global.asax文件,ASP.NET会实例化这个文件中定义的类,作为应用程序的全局对象,用于处理全局事件。 HttpApplication对象处理请求的...

    【ASP.NET编程知识】asp.net mvc core管道及拦截器的理解.docx

    ASP.NET Core 框架中,管道和拦截器是两个核心概念,对于 MVC 应用程序的执行顺序和请求处理过程起着至关重要的作用。在本文中,我们将详细介绍 ASP.NET Core 管道和拦截器的理解。 一、ASP.NET Core 管道 ASP.NET...

    ASP.NET架构详解

    随后,.NET Framework中的ASP.NET运行时接管请求处理过程,直到生成响应为止。 #### 四、总结 通过深入了解ASP.NET的底层架构和工作原理,我们可以更好地理解ASP.NET如何高效地处理HTTP请求,并为开发高质量的Web...

    ASP.NET 应用程序生命周期

    IIS7.0 的集成管道模型为 ASP.NET 应用程序带来了显著的好处,包括统一的请求处理、灵活的模块管理和改进的事件触发机制。通过理解这些核心概念,开发者可以更好地设计和优化自己的 ASP.NET 应用程序,以满足不断...

    ASP.NET 编程模型介绍

    ASP.NET 编程模型是微软开发的Web应用程序框架的核心组成部分,它定义了处理客户端请求的整个生命周期。在ASP.NET中,编程模型主要包括HttpApplication、HttpModule、HttpHandler和相关事件的执行顺序。以下是对这些...

    从底层了解ASP.NET

    接着,HttpApplication对象被创建,它是ASP.NET请求处理管道的核心,包含一系列预定义的事件和模块,用于执行请求生命周期中的各种任务,如身份验证、授权、错误处理等。 【HttpRuntime,HttpContext以及...

    ASP.NET复习题

    页面引擎负责处理用户请求,HTTP管道管理请求生命周期,配置系统允许自定义应用设置,控件库则提供了丰富的用户界面元素。 2. **ASP.NET页面生命周期** 一个ASP.NET页面从初始化到呈现经历了多个阶段,包括初始化...

    ASP.Net 工作原理

    当用户请求一个ASP.NET文件(如.aspx、.asmx等)时,IIS会将请求转发给aspnet_isapi.dll,这个扩展使用命名管道与ASP.NET辅助进程(aspnet_wp.exe)通信。IIS会验证用户身份并创建Windows访问令牌,如果启用匿名访问...

    【ASP.NET编程知识】ASP.NET Core中间件计算Http请求时间示例详解.docx

    在ASP.NET Core中,中间件扮演着至关重要的角色,它是一个处理HTTP请求和响应的组件,按顺序执行,形成一个请求处理管道。本篇文章将深入讲解如何在ASP.NET Core中编写中间件来计算HTTP请求的处理时间。 首先,我们...

    Pro ASP.NET Core MVC 2 (7th) 中文版

    《Pro ASP.NET Core MVC 2 (7th) 中文版》是一本深入讲解ASP.NET Core MVC 2技术的专业书籍,适合C#开发者学习使用。该书涵盖了从基础到高级的多个方面,旨在帮助读者全面理解并掌握这个强大的Web开发框架。 ASP...

Global site tag (gtag.js) - Google Analytics