zoukankan      html  css  js  c++  java
  • .NET总结--ASP.NET工作原理

    前言

      前前后后写了不少关于某些技术啥的博客,一直在追新求深,而真正使用上的时候才发现了解的太少太少了,从事.net开发三年有余了不是它不行了而是我坚持不住了,如今不得不向生活低头,这个系列作为三年技术知识的一个小小总结吧,最主要的是写给自己也许这些在技术大牛哪里根本不值一提,而我却把它当成我的全部.

    简介

      主要剖析一下客户端(Browser)发送请求到服务端过程如何处理

    ASP.NET请求解析

      IIS6

      请求流程:客户端向IIS发送请求,该请求由http.sys(监听),当监听到http请求时分配w3wp.exe运行进程进行(处理),若为静态请求直接返回客户端,其他则搜寻扩展程序表也就是(监控)程序(Metabase) 查找相应ISAPI.DLL处理,如图:

      

      IIS7

      与6相比较7不仅仅多了许多功能 其实本质上没有太大变化工作流程如图:

      

      

       1.IIS7 服务器不仅仅支持最大连接数限制还可以限制带宽使用

       2.IIS7增加了失败请求跟踪规则

       3.应用程序池单独权限设置

       此外.iis7与ii6 映射策略略有不同,当iis启用经典模式的时候与iis6一样使用aspnet_isapi.dll针对.aspx请求处理,但是当启用集成模式的时候则使用托管程序处理(System.Web.UI.PageHandlerFactory)

    CLR处理机制

      

      

      如上图所示根据集成鱼托管模式区分调用有所差异aspnet_isapi.dll 工作原理如图:

      

      这里引用一下园子小哥的总结:  

      由ISAPI aspnet_isapi.dll加载CLR环境。

    1. IsapiRuntime运行时被加载,接管了HTTP请求后,创建IsapiWorkerRequest对象来封装当前的HTTP请求,随后把对象传递给ASP.NET运行时HttpRuntime。

    2. HttpRuntime会根据IsapiWorkerRequest对象创建表示当前HTTP请求的上下文对象HttpContext。

    3. HttpApplicationFactory会创建或者从HttpApplication对向池中选取可用的HttpApplication对象,处理完后释放。

    4. HttpApplication在初始化中,ASP.NET会根据配置文件加载HttpModule对象(用于注册HttpApplication对应的事件,将所需的操作注入Htt请求的处理流程)

    5. Http请求最终由HttpHandler处理。不同的资源类型对应不同的HttpHandler。

    总结

      

      首先,浏览器尝试连接Web服务器的80端口,如果Web服务器可以响应此连接请求,就在浏览器与Web服务器间建立了一个通讯链路,在此“通道”上浏览器与Web服务器可以相互发送与接收信息。

    假设浏览器向Web服务器发出一个读取某ASP.NET站点上的某个ASPX网页的请求。当此请求通过网络到达Web服务器时,此请求被HTTP.SYS组件所接收。HTTP.SYS系统组件会检查此HTTP请求的相关信息,根据其URL将此HTTP请求发送给运行在某个应用程序池中的工作者进程处理。如果同时有多个针对此ASP.NET站点的HTTP请求,HTTP.SYS会将这些请求排队,加入到对应的应用程序池的HTTP请求队列中等待。

    如果这是第一个对ASP.NET站点的HTTP请求,工作者进程会加载aspnet_isapi.dll,并将请求转给它,aspnet_isapi.dll接着会装载.NET CLR,创建一个针对此ASP.NET站点的应用程序域,然后启动一个复杂的由多个步骤和组件参与的处理流程,当此处理流程结束,要发回给客户端的结果(通常是HTML代码,当然也可以是其他类型的资源,比如由程序动态生成的图片)已经生成,此结果被转发给HTTP.SYS。

      注意:对于以集成模式运行的IIS 7,.NET CLR在应用程序池一启动就自动装载,从而避免了临时装载CLR的花销。后继处理过程与IIS 6基本一致。

  • 相关阅读:
    解析SQL Server之任务调度
    Sqlserver (转载)事物与锁
    浅谈SQL Server数据内部表现形式
    浅谈SQL Server事务与锁(上篇)
    如何查看某个查询用了多少TempDB空间
    Select count(*)和Count(1)的区别和执行方式
    zookeeper 源码(二) session 和 处理事务请求
    zookeeper 源码(一) 选举和同步数据
    分布式一致性协议 --- Paxos
    分布式事务 --- 2PC 和 3PC
  • 原文地址:https://www.cnblogs.com/workstation-liunianguowang/p/9015553.html
Copyright © 2011-2022 走看看