之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解。

本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过程。我们从ASP.NET站点的一个页面请求开始说起,先看下面对于某个请求的简单执行模型

(注意这是对asp.net站点Index.aspx页面的第一次请求,所以需要进行动态编译):

我们通过ASP.NET的执行模型简单的描述了一次web请求过程,注意在不同的IIS版本中,处理模型和通信方式是不一样的,在IIS7.0以上asp.net已经作为一个模块集成在了IIS中。

我们继续对上面的流程进行相关阐述:

  1. 首先我们通过浏览器发送页面请求至IIS服务器,由于是第一次请求index.aspx,IIS会将请求转交给ASP.NET后进入编译期(加载aspnet_isapi.dll)
  2. 由于ASP.NET是通过CLR运行,而CLR只认识MSIL(微软中间语言),所以ASP.NET会判断代码是否已被编译,若未被编译则会走二次编译流程,否则跳过编译进入执行期,
  3. 在执行期进行一系列的模块处理,然后返回请求

接着我们来看看什么是二次编译?

二次编译:

将源代码文件通过编译器编译成中间语言代码和元数据,执行时再编译为本地机器语言代码的过程。

感觉不好理解?那就直接看图吧!

如上,我们把这两次编译的过程叫做二次编译。

二次编译在站点页面首次被请求时执行,ASP.NET判断已经编译过的不会再走编译流程。

看完二次编译然后我们再对asp.net站点Index.aspx进行首次请求:
用户请求—>IIS服务器—>ASP.NET—>二次编译—>MSIL(代码编译器)—>本机语言(JIT)—>执行期

  1. 创建应用程序域
  2. 初始化核心对象
  3. 启动应用程序
  4. 根据配置对请求进行处理,一系列HTTPModule和HTTPHandler

最后请求通过一层层HttpModule和HttpHandler后进入页面的初始化,加载,呈现,用户操作,卸载。

这就解释了为什么我们的站点页面第一次被请求的时候总是慢一点的原因,原因就是第一次请求时走了编译的过程,加载了一系列初始化的东西。

如果我有多个应用程序池多个站点都部署在一台IIS服务器,我发一个请求IIS如何知道我请求的是哪个呢?这里就会提到到一个HTTP.SYS组件。

其实在IIS将请求交给ASP.NET之前,会最先触发HTTP.SYS的响应,由HTTP.SYS负责把请求传入相应的应用程序池。然后继续走上面的ASP.NET流程
每当创建一个应用程序池,该池的ID就会生成并在HTTP.SYS文件中注册。

总结:

如上图:在执行期会进行一系列的操作,然后通过HttpModule模块到达HttpHandler处理程序,最后开始进入页面的生命周期相关的东西。

看完如果对你有帮助还可关注公众号CodeL获取更多内容。

ASP.NET执行模型之IIS服务器处理流程的更多相关文章

  1. IIS 之 Web 服务器上的 ASP.NET 进程模型设置

    配置 Microsoft Internet 信息服务 (IIS) Web 服务器上的 ASP.NET 进程模型设置. processModel 节只能在 Machine.config 文件中进行设置, ...

  2. IIS 内部运行机制及Asp.Net执行过程详解

    一直以来对一个Asp.net页面穿过IIS后就返回给浏览器一个HTML页面感觉很是神奇.虽然做技术这么长时间了,也曾经大致了解过一点来龙去脉,但是如果你真的问起我比较详细的过程,我还真的回答不上来,好 ...

  3. WebForm ASP开发方式、 IIS服务器以及WebForm开发基础

    网页端 B/S两种:(ASP.NET  --网站应用开发技术) WebForm:  微软最先出现的网站开发技术 MVC:  后来开发,为了让java.PHP转过来的开发人员更容易接受使用 客户端 C/ ...

  4. 配置asp.net IIS服务器遇到的问题以及详细图例解决方案

    原来配置过IIS服务,但是没有将自己的程序放在IIS服务器上,今天突发奇想,看看自己写的程序怎么样啊,能否在服务器上运行一下,说干就干,但是遇到了很多困难,今天把陪孩子过程以及遇到的问题给大家说说,希 ...

  5. 注册asp.net 4.0版本到IIS服务器中

    在IIS服务器的运维的过程中,有时候部署asp.net网站发现未安装.net framework对应版本信息,此时就需要重新将.net framework对应的版本注册到IIS中,此处以重新注册.ne ...

  6. [ASP.net教程]IIS服务器 远程发布(Web Deploy)配置

    asp.net 网站有三种常用的发布方式:分别是拷贝开发机上发布好的文件到服务器硬盘上.打包成安装程序到服务器上安装.通过Visual Studio 开发平台远程发布到服务器. 在asp.net网站的 ...

  7. ASP.NET Core WebApi 项目部署到 IIS 服务器的总结

    Point: - ASP.NET Core WebApi 项目 - 发布到 IIS 服务器 1. 选择 File System 2. 输入要发布到的路径 # 其它默认,直接发布 3. 打开 IIS,添 ...

  8. ASP.NET路由模型解析

    大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...

  9. processModel与ASP.NET进程模型

    配置 Microsoft Internet 信息服务 (IIS) Web 服务器上的 ASP.NET 进程模型设置.其作用是配置IIS或IIS中的应用程序池(IIS7及以后版本)的安全性,性能,健壮性 ...

随机推荐

  1. 使用 Google Analytics 跟踪 JavaScript 错误

    Google Analytics(谷歌分析)不仅仅是一个流量统计工具,你还可以用它来测量广告活动的有效性,跟踪用户多远到所需的页面流(从点击广告到购物车到结账页面)获取,并基于用户的信息设置浏览器和语 ...

  2. 【干货分享】32本优秀的 JavaScript 免费电子书

    JSbooks 收集了32本优秀的 JavaScript 免费电子书,分为初级.中级.高级三个类比,大家可以根据自身的情况需要下载.实实在在的干货!记得收藏和分享啊:) 您可能感兴趣的相关文章 Ver ...

  3. css3加载ing动画

    项目中ajax交互成功前总会需要给用户提醒,比如请稍候.正在加载中等等,那个等待的动图以前项目中用的是gif,在移动端画质很渣,有毛边,于是在新项目中用css3展示加载中的动画效果. function ...

  4. JavaScript中对象的比较

    Javascript中有'=='和'==='两种相等比较,后者是全等,会判断数据类型,前者是相等,在比较时,会发生隐式转换. 如果将两个对象做'=='比较,结果会如何呢? 比如有如下两个对象: var ...

  5. CSS基础知识之文本属性二三事

    line-height 可以给某个元素指定一个不带单位的缩放因子,这样它的后代元素就会继承这个缩放因子,再根据自身的字号大小来计算自己的行高(line-height)值, body { font-si ...

  6. spring-hellow word

          在大三的时候开了一门JAVAEE SSH框架,属于软件方向选修课程,虽然本人是搞硬件的,但是也选了这么课程,因为我在想有一天物联网也会走上大门户的,所以果断去蹭课了,时至今日,重新拾起来, ...

  7. Ubuntu 安装系统资源托盘监视应用

    安装 sudo apt-get install indicator-multiload 打开 indicator-multiload 设置开机启动    sudo gedit /etc/rc.loca ...

  8. mysql 数据库服务中的应用程序

    mysql 是一个数据库服务,而实现数据库服务是由mysql中的很多子应用程序来完成的(http://dev.mysql.com/doc/refman/5.7/en/programs-overview ...

  9. iOS多线程实现1-pthread

    1 操作系统.进程.线程简单介绍 现在的程序都是在操作系统上跑,很少有裸机的,而且大部分的嵌入式应用也都支持操作系统,当然还有一些很低端的嵌入式设备没有操作系统. iPhone手机跑的是iOS操作系统 ...

  10. Android Small插件化框架源码分析

    Android Small插件化框架源码分析 目录 概述 Small如何使用 插件加载流程 待改进的地方 一.概述 Small是一个写得非常简洁的插件化框架,工程源码位置:https://github ...