.NET总结--ASP.NET工做原理

前言api

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

简介服务器

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

ASP.NET请求解析spa

  IIS6.net

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

  

  IIS7blog

  与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基本一致。

相关文章
相关标签/搜索