【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)
前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚上我还是坚持打开电脑,分享一些asp。net生命周期的知识,一是可以巩固自己所掌握的知识,并且在分享的期间也能发现一些问题和大家一起探讨,同时也希望让一些“小白”们尽可能的了解asp内部的运行原理,不要每天只知道把控件拖来拖去,或者是只是知道这么写代码,而不知道为什么这么写代码。
首先呢,让我们在复习一下上一节的内容:
1)浏览器输入请求网址的域名,浏览器按照HTTP协议封装成请求报文,然后通过DNS解析域名得到IP地址,接着通过socket插座将请求报文传到服务器.
2)IIS接受到请求后,解析要求请的是一个什么类型的文件,如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器。
3)如果是动态文件,如aspx或者ashx等动态文件,IIS会发现自己处理不了这样的文件,那么,IIS就会去他的映射表里面去找,实现它接口的那个扩展程序可以处理这样的动态文件,然后IIS发现有个叫做aspnet_isapi的这样一个扩展程序可以处理处理像.aspx和.ashx这样后缀名的文件,那么IIS则把请求交给这个aspnet_isapi来处理。
4)aspnet_isapi将启动CLR(公共语言运行时),负责启动asp.net框架的域,然后将请求交给asp.net框架来处理,框架里面有个一HttpRuntime类的对象,那倒请求后,它负责将请求封装成HttpContext对象,常见Application对象,调用application对象的ProcessRequest方法(HttpContext对象作为参数)处理请求(具体的实现我们将在后面讲解到),最后处理完成后,返回给IIS,IIS在返回给浏览器。
这是上一结我们所讲的内容,那这一节我们主要讲的是:
1--请求报文是怎么到iis的,iis又是怎么处理的
2--请求报文时怎么传递给CRL的
3--CRL拿到请求之后具体是解析处理请求,然后呈现出我们想要的页面。这里我们重点研究两个东西:
1)---Application对象的创建以及 HttpModule 注册管道的事件 golable注册管道事件
2)---页面的生命周期
这一节的内容比较多,而且有些小伙伴认为这里面有些东西是在开发过程当中用不到这知识,但是笔者认为从基础和原理去了解才能让我们正确的掌握asp。net开发并且开发出高质量的应用程序。
在阅读本节内容时,大家先了解一下以下几个概念
内核模式:就是操作系统模式,其中的程序代码能直接访问所有内存(包括所有的用户模式进程和应用程序的地址空间)和硬件,也称为“管理员模式”、“保护模式”或“Ring 0”。
用户模式:跑在操作系统之上,比如说qq,百度影音这些应用程序。都是跑在用户模式之上的。
在windows xp以前(包括xp),基于http协议的的程序都是在用户模式下运行的,而且必须自己处理例如软件中断、context swith、线程调度等问题,并且无法直接接触系统资源,过去,HTTP服务器,如IIS, Apache等都是利用Winsock API来创建一个User mode下的network listener,这个network listener往往独自占用一个ip端口,也就是说,同一个端口在同一时间只能有一个应用程序监听,这在有些时候是一个不太令人舒服的限制。
在windows 2003以后,
【原创】asp.net内部原理(三) 第三个版本 (最详细的版本)的更多相关文章
- asp.net内部原理3
asp.net内部原理(三) 第三个版本 (最详细的版本) 前言: 今天继续吧这个系列补齐,这几天公司的项目比较忙,回到家已经非常的累了,所以也没顾得上天天来这里分享一些东西和大家一起探讨,但是今天晚 ...
- ASP.NET内部原理(HttpHandler和HttpModule)
[IT168 技术文档]在以前的ASP时候,当请求一个*.asp页面文件的时候,这个HTTP请求首先会被一个名为 inetinfo.exe进程所截获,这个进程实际上就是www服务.截获之后它会将这个请 ...
- Android线程管理(三)——Thread类的内部原理、休眠及唤醒
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- JVM 内部原理(三)— 基本概念之类文件格式
JVM 内部原理(三)- 基本概念之类文件格式 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Envi ...
- Android线程管理(三)——Thread类的内部原理、休眠及唤醒
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- 【ASP.NET Identity系列教程(三)】Identity高级技术
注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序 ...
- asp.net跳转页面的三种方法比较
目前,对于学习asp.net的很多朋友来讲,实现跳转页面的方法还不是很了解.本文将为朋友们介绍利用asp.net跳转页面的三种方法,并对其之间的形式进行比较,希望能够对朋友们有所帮助. ASP.NET ...
- Java并发编程原理与实战三十八:多线程调度器(ScheduledThreadPoolExecutor)
在前面介绍了java的多线程的基本原理信息:线程池的原理与使用 本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分. 我们如果要用j ...
- 《ASP.NET SignalR系列》第三课 SignalR的支持平台
从现在开始相关文章请到: http://lko2o.com/moon 接着第二课:<ASP.NET SignalR系列>第二课 SignalR的使用说明 一.服务器系统要求 SignalR ...
随机推荐
- UVA 11019 Matrix Matcher 矩阵匹配器 AC自动机 二维文本串查找二维模式串
链接:https://vjudge.net/problem/UVA-11019lrjP218 matrix matcher #include<bits/stdc++.h> using na ...
- pymongo创建索引、更新、删除
pymongo创建索引.更新.删除 索引创建 ## collection 为数据集合collection.create_Index({'需创建索引字段': 1})collection.ensu ...
- rails局部模板 render
<%= render partial: 'file' %> file是以_开头命名的文件,比如_cart.html.erb 这样就可以用render来调用了 还可以传参数 比如 rails ...
- 获取页面中更新删除传过来的id
利用uri辅助函数 $id=$this->uri->segment(4); 其中segment(参数) 是表示你要截取获得第几个数据.
- 给原型扩展一下tirm方法
方便以后,直记录下来 <script type="text/javascript"> //给原型护展tirm方法 String.prototype.trim=funct ...
- ggplot2——简介
ggplot2是R语言最为强大的作图软件包,强于其自成一派的数据可视化理念.当熟悉了ggplot2的基本套路后,数据可视化工作将变得非常轻松而有条理. 本文主要对ggplot2的可视化理念及开发套路做 ...
- 关于Cocos2d-x中init方法和onEnter方法的区别
init()和onEnter()这两个方法都是写实例化对象的类(比如继承自Node的一些类等等)的时候用到的方法. 一般都是public类型下面的 bool init(); void onEnter( ...
- Project Navigator Help: Creating a Workspace in Xcode
Creating a Workspace Start a multiproduct development endeavor by creating a workspace. 1.Choose Fil ...
- jquery promise
认识jQuery的Promise 先前了解了ES6的Promise对象,来看看jQuery中的Promise,也就是jQuery的Deferred对象. 打开浏览器的控制台先. <scrip ...
- 【Python】添加注册表信息脚本
http://wrox.cn/article/1004030/ # -*- coding: utf-8 -*- """ Created on Tue Jun 02 16: ...