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

本次我们重点分析用户请求到页面呈现过程中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. [deviceone开发]-动画示例源码

    一.简介 do_FrameAnimtionView组件是用加载GIF动态图片和加载一系列图片形成动画效果的展示组件,这个示例直观的展示组件基本的使用方式.适合初学者. 二.效果图 三.相关讨论 htt ...

  2. swift学习笔记之-泛型

    //泛型(Generics) import UIKit /*泛型(Generics):泛型代码可以让你编写适用自定义需求以及任意类型的灵活可重用的函数和类型.它的可以让你避免重复的代码,用一种清晰和抽 ...

  3. Python将Excel生成SHP

    #!/usr/bin/env python # -*- coding: utf-8 -*- import gdal import xlrd import shapefile # open the ex ...

  4. 原创QQ影音DLL劫持漏洞+动画实战教程

    1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...

  5. Laravel 5 性能优化技巧

    说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...

  6. iOS创建、删除文件夹、获取沙盒路径

    1.获取沙盒路径 // 获取沙盒路径 NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent: ...

  7. 【数据库】MySQL的安装与简单使用

    首先我们要下载Mysql的安装包,大家可以到http://mysql.com官网中根据自己的电脑系统版本下载 也可以点击 MySQL资源 下载 密码:btuu 建议下载5.7以上的版本,因为省掉了许多 ...

  8. 使用TARGET_IPHONE_SIMULATOR和TARGET_OS_IPHONE宏区分模拟器和设备

    #if TARGET_IPHONE_SIMULATOR          NSLog(@"run on simulator");      #else          NSLog ...

  9. eclipse出现感叹号的解决办法

    当eclipse导入项目出现红叉但无提示错误时,去看:1>菜单路径----Window/Show View/Console2>菜单路径----Window/Show View/Error ...

  10. Android微信登陆

    前言 分享到微信朋友圈的功能早已经有了,但微信登录推出并不久,文档写的也并不是很清楚,这里记录分享一下. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.co ...