博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET温故而知新学习系列之深度剖析ASP.NET架构—ASP.NET请求的处理过程(一)...
阅读量:5963 次
发布时间:2019-06-19

本文共 1861 字,大约阅读时间需要 6 分钟。

原文地址:http://www.cnblogs.com/menglin2010/archive/2012/01/02/2309345.html

 

  前言

  我为什么要写这一系列呢,因为只有了解运行机制,学好底层,对我们更深入的理解一定的问题有帮助

  阅读目录

  一:ASP.NET的工作原理

    二:ASP.NET页面的执行流程

  三:ISAPI

  四:ASP.NET请求的处理过程

  一:ASP.NET的工作原理

  我们根据下面这张图来说明ASP.NET是如何来工作的

  1.1 客户请求Web页

  我们知道ASP.NET是B/S结构,也就是服务器和浏览器这样一个结构,服务器可以有一台或者多台,对于浏览器可以有无数个,每个客户是通过浏览器来访问服务器的,所以第一步是客户请求Web页。

  1.2 Web服务器寻找指令文件

  于是这个指令就通过浏览器被发送到服务器上比如:,在服务器上开始寻找指令文件,在我们这里是寻找.aspx文件,如果服务器上没有装.Framework,对于.aspx文件服务器就不知道如何处理了。如果服务器已经装了.Framework,就会找这个指令。

  1.3 ASP.NET代码发送给公共语言运行时进行编译

  这个指令是谁来处理的呢?是aspnet_isapi.dll这个动态链接库来处理的,可以说在ASP.NET中所有的.aspx文件都是被aspnet_isapi.dll它来处理的,它的作用就是把.aspx文件发送给公共语言运行时进行编译,也就是发送给.Framework里面的公共语言运行时CLR进行编译。

  1.4 HTML流返回给浏览器

  编译完了以后,把HTML流返回给浏览器。

  1.5 浏览器处理HTML流并显示页面

  浏览器解释HTML流,并显示页面。

  可以看出Web服务器处理的过程就是调用aspnet_isapi.dll处理aspx文件的过程,处理的结果就是一个HTML静态页面。

    

  二:ASP.NET页面的执行流程

  2.1 每个.aspx文件实际上是继承page类的,在运行的过程中它从一个类变成了一个对象,这是一个实例化的过程。

  2.2 把类转化为一个对象以后呢,被CLR转化为HTML,发送给aspnet_iaapi.dll。

  2.3 aspnet_iaapi.dll然后和IIS交互,把HTML发送给IIS。

  2.4 IIS把HTML返回给浏览器。

  

  三:ISAPI

   我们前面好几次讲到aspnet_iaapi.dll,到底aspnet_iaapi.dll是个什么东西呢?

  在互联网开始时候,基本上Intent都是静态页面,静态页面是以.HTML文件为代表的,但是随着需求的发展,静态页面已经满足不了需求了,这时候开发者就需要扩展Web服务器的功能,这时候不同的Web服务器厂商都遵循了同一个主题“向Web服务器插入某些组件”,也就是说这在极大程度上丰富了Web服务器,对于Web服务器来说它可以进行功能的扩充,是通过加组件的方式,调用组件来实现一些功能的。所有的Web服务器都允许开发者自己来插入一些组件来增强Web服务器的功能,微软提出了ISAPI(全称是Intent Server API),所以到这里明白了,提供了一种技术,这种技术让开发者向Web服务器插入一些组件来扩充Web服务器的功能。

  ISAPI经常用两个手段实现。

  3.1 ISAPI扩展

   ISAPI扩展是使用Win32动态链接库来实现的,我们之前提到的aspnet_iaapi.dll就是这种方式,这种扩展是通过dll来实现的。

  3.2 ISAPI过滤器

  客户端每次向服务器发送请求都要经过滤器的,客户端不需要在请求中指定过滤器,只需要把请求发送给Web服务器,Web服务器把请求传递给相关的过滤器,过滤器可能修改请求,执行某些操作。

  四:ASP.NET请求的处理过程

  ASP.NET请求的处理过程是基于管道模型的,在模型中ASP.NET把HTTP请求传递给管道中的所有模块,每个模块都接收HTTP请求并拥有完全控制权,模块可以用自认为合适的方式来处理请求,一旦HTTP请求经过所有HTTP模块,最终被HTTP处理程序所处理,HTTP处理程序队请求做一些处理,并且结果将再次经过管道中的HTTP模块。类似一个管道似的。

  

  

  

举例和生活相结合,做一条快乐的小<。)#)))≦儿
你可能感兴趣的文章
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>