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

本次我们重点分析用户请求到页面呈现过程中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. Immutable.js – JavaScript 不可变数据集合

    不可变数据是指一旦创建就不能被修改的数据,使得应用开发更简单,允许使用函数式编程技术,比如惰性评估.Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map 和 f ...

  2. jQuery动态提示消息框效果

    效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/2.htm 原文:http://keleyi.com/a/bjac/hxv86dyi.htm <!DOC ...

  3. ID卡和IC卡

    1.ID卡 ID卡就是一种身份识别卡,卡内除了卡号之外,无任何加密功能. ID卡的工作原理:它是由卡.读卡器.后台控制器组成的. (1)读卡器通过天线发射射频信号 (2)当卡进入信号范围内后卡被激活 ...

  4. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q1-Q3)

    这里我把从网上搜集到的针对Sharepoint 70-576的有关练习进行系统的解析,整理成一个系列, 分期.分批次共享出来,供大家研究. 70-573考试注重的是"知道"相关知识 ...

  5. 判断scrollview是否滚动到了底部

    调用函数判断如下:if(getScrollY() + getHeight() >=  computeVerticalScrollRange()){        Log.d(TAG," ...

  6. Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator

    Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Gen ...

  7. Android根据字符串加载Activity和图片

    根据传入的字符串跳转Activity Intent intent = new Intent(context,Class.forName("com.packname.Activity" ...

  8. 【iOS】block的使用

    Block 是iOS在4.0之后新增的程式语法,一般用于回调方法,功能上和delegate类似.本文将讲解block的几种常见的使用方法,当然,block中最值得注意的还是它的内存管理,我将在< ...

  9. 【iOS】开发常用命令

    环境信息: Mac OS X 10.10.1 删除指定后缀名的文件 进入指定文件夹,输入: find . -name .svn | xargs rm -Rf 查看全部隐藏文件 defaults wri ...

  10. 【读书笔记】iOS网络-错误处理的经验法则

    一,在接口契约中处理错误. 二,错误状态可能不正确. 设备模糊地确认操作是崇拜失败的.比如,移动应用发出HTTP请求以在两个账户间转账.请求被银行系统接收并正确地处理:然而,由于网络失败应答却丢失了, ...