• ASP.Net 管道模型 VS Asp.Net Core 管道 总结


    1 管道模型 

    1 Asp.Net Web Form管道

    请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象,封装此次请求有关的所有信息,然后进入HttpRuntime类进行进一步处理。HttpRuntime通过请求信息创建HttpContext上下文对象,此对象将贯穿整个管道,直到响应结束。同时创建或从应用程序池里初始化一个HttpApplication对象,由此对象开始处理之前注册的多个HttpModule。之后调用HandlerFactory创建Handler处理程序,最终处理此次请求内容,生成响应返回。

    2 ASP.Net  MVC  管道

     

     

    3、Asp.Net Core管道

    IHttpModule和IHttpHandler不复存在,取而代之的是一个个中间件(Middleware)。

    Server将接收到的请求直接向后传递,依次经过每一个中间件进行处理,然后由最后一个中间件处理并生成响应内容后回传,再反向依次经过每个中间件,直到由Server发送出去。

    中间件就像一层一层的“滤网”,过滤所有的请求和相应。这一设计非常适用于“请求-响应”这样的场景——消息从管道头流入最后反向流出。

    4 .net Core Middleware

     Middleware支持Run、Use和Map三种方法进行注册,下面将展示每一种方法的使用方式。

    • Run的这种用法表示注册的此中间件为管道内的最后一个中间件,由它处理完请求后直接返回。
    • 通过Use方法注册的中间件,如果不调用next方法,效果等同于Run方法。当调用next方法后,此中间件处理完后将请求传递下去,由后续的中间件继续处理。
    • Map方法主要通过请求路径和其他自定义条件过滤来指定注册的中间件,看起来更像一个路由。

    Asp.Net Core框架内置了几个中间件

    4 Asp.net HttpModule 

    用处:

    • 权限认证和授权:每个请求都经过Module,所以做权限认证很好
    • URL 转发
    • 发爬虫

    ASP.NET 请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET 把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。

    注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。

     HttpModule生命周期示意图

    Asp.net  HttpHandler

     HttpHandler是asp.net真正处理Http请求的地方。在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

    当一个HTTP请求经过HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

    对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandlerFactory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

    一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。

     可以在一个.ashx文件中实现IHttpHandler

    坚持就是力量 量变造就质变
  • 相关阅读:
    主流NoSQL数据库评测之HBase
    Java Io原理及应用
    Facebook:HBase每月存储1350亿条信息
    Facebook为何选择云计算开源Hadoop
    ActiveMq配置解析
    主流NoSQL数据库评测之HandlerSocket
    软件类官方网站收藏
    Mongodb 更新失败解决方案
    主流NoSQL数据库全方位评测:MongoDB
    java为什么比c++要慢?以及如何提高java的效率
  • 原文地址:https://www.cnblogs.com/songxm/p/14705467.html
Copyright © 2020-2023  润新知