Asp.net原理(第一篇)

Asp.net (第一篇)

 当用户在浏览器输入一个URL地址后,浏览器会发送一个请求到服务器。这时候在服务器上第一个负责处理请求的是IIS。然后IIS再根据请求的URL扩展名将请求分发给不同的ISAPI处理。

  流程如下:

    

  1、IIS => aspnet_isapi阶段

  ISAPI是一个底层的WIN32 API,开发者可以使用这些接口深入到IIS,让IIS支持各种其他处理程序。ISAPI是一个桥接口,通常用于高层次的工具与IIS之间的接驳。例如Windows下的Apache与Tomcat就是构建于ISAPI之上。ISAPI是自定义Web请求处理中第一个IIS入口点。

  在上述步骤中,对于html页面,txt文件,jpeg和gif图像的请求,IIS就自己处理了,当发现请求是Asp.net的资源时(如*.aspx,*.asmx,*.ashx),请求将传递到ASP.NET ISAPI扩展aspnet_isapi.dll。

  aspnet_isapi.dll可以处理多种资源类型,包括Web服务和HTTP处理程序调用等。

  如IIS7中的处理程序映射:

  

  以上映射的意思是,将.aspx扩展名的路径传递给aspnet_isapi.dll处理程序处理。

  2、aspnet_isapi => 辅助进程

  辅助进程在(IIS5里是aspnet_wp.exe;IIS6里是w3wp.exe)。

      aspnet_isapi与辅助进程的通信:

  1. aspnet_isapi和辅助进程间的通讯是使用一组 "命名管道" 进行的,命名管道 是一种Win32机制,用于跨进程边界传输机制,命名管道的工作方式。与管道相似:在一端传入数据,在另一端输出相同的数据.建立管道既可以连接本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是Windows中最有效,最灵活的工具。
  2. ISAPI使用异步命名管道来将请求转发给辅助进程并获得响应。
  3. 辅助进程 在需要查询有关IIS环境的信息(即服务器变量)时又使用同步管道。
  4. ISAPI模块创建固定数量的命名管道,并使用重叠的操作以通过小的线程池,处理同一时间进行的连接。当通过管道进行的数据交换操作结束后,完成例程,将断开客户端,并重新使用管道实例为新的客户端服务。线程池和重叠操作均可以保证使ASP.NET ISAPI的性能达到令人满意的水平。 aspnet_isapi绝不会处理Http请求。

  IIS与aspnet_isapi的处理逻辑:

  1. 当请求到达时,IIS检查资源类型并调用aspnet_isapi扩展。如果启用了默认的进程模型。aspnet_isapi会将请求排队。并将请求分配给辅助进程、所有的请求数据都是通过异步I/O发送。
  2. 收到请求后,ASP.NET辅助进程将通知aspnet_isapi,它将为请求服务(建立管道)。
  3. 在辅助进程的上下文中执行请求。有时,辅助进程可能需要回调aspnet_isapi以完成请求,也就是需要说枚举服务器变量。这种情况下,辅助进程将使用同步管道,因为这样可以保持请求处理的逻辑顺序。
  4. 完成后,响应被发送到打开了异步管道的aspnet_isapi。如果aspnet_isapi检测到辅助进程已取消,它将自动终止请求并释放所有相关的IIS资源。

    3、Asp.net运行时环境:

  构成Asp.net运行时环境的可执行文件如下:

名称 类型 账户
aspnet_isapi.dll Win32 DLL LOCAL SYSTEM
aspnet_wp.exe Win32 EXE ASPNET
aspnet_filter.dll Win32 DLL LOCAL SYSTEM
aspnet_state.exe Win32 EXE ASPNET

  aspnet_filter.dll组件是一个小的Win32 ISAPI筛选器,用来备份ASP.NET应用程序的无Cookie会话状态。

  aspnet_state.ext的作用对Web应用程序更为重要,因为它用于管理会话状态。

  好了,到目前为止,IIS就已经将请求转交到了辅助进程,而这个辅助进程实际上就是Asp.net的开始标志,我们平时所说的Asp.net开发就是从这个地方开始。

转载于逆心,网址:http://www.cnblogs.com/kissdodog/p/3527379.html

时间: 2024-08-08 09:41:46

Asp.net原理(第一篇)的相关文章

kubernetes之K8s核心原理--第一篇(五)

  本来以为一篇就能搞定,还是低估了自己的废话,好吧,只能通过两篇文章向大家介绍K8s核心原理. 一. Kubernetes API Server 原理分析 1. kubernetes API Server介绍   kubernetes API server的和核心功能是提供了kubernetes各类资源对象(pod.RC .service等)的增.删.改.查以及watch等HTTP Rest接口,是整个系统的数据总线和数据中心.有时候我们使用kubectl创建或者查看pod等资源的时候,发现没

MyBATIS插件原理第一篇——技术基础(反射和JDK动态代理)(转)

在介绍MyBATIS插件原理前我们需要先学习一下一些基础的知识,否则我们是很难理解MyBATIS的运行原理和插件原理的. MyBATIS最主要的是反射和动态代理技术,让我们首先先熟悉它们. 1:Java反射技术 在Java中反射技术已经大行其道,通过不断的优化性能得到了巨大的提高,而反射技术使得Java的可配置性大大提高.让我们来写一个服务打印hello + 姓名. import java.lang.reflect.InvocationTargetException; import java.l

疯狂的ASP.NET系列-第一篇:啥是ASP.NET

最近想学下ASP.NET,于是在网店上看到一本书叫做ASP.NET高级程序设计,老婆在旁边问了句:"这个不是DSP(数字信号处理,大学读的电子,所以这个比较熟),是ASP啊,什么是ASP啊?".我想了几半天,都没想出这个缩写是啥意思,对于搞了一年的.net的孩子,居然连这都不知道,上班了真心没在下面好好看书啊.有的孩子喜欢实践中学习,有的孩子喜欢看书,我比较喜欢看书+实践,最好有个小项目能做下,现有条件只能看书+demo,看到小凯哥每天都有总结,心里也痒痒的,向他学习.闲话扯多了,进入

疯狂的ASP.NET系列-第一篇:啥是ASP.NET后续

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

HTTP -> Asp.net (第一篇)

当用户在浏览器输入一个URL地址后,浏览器会发送一个请求到服务器.这时候在服务器上第一个负责处理请求的是IIS.然后IIS再根据请求的URL扩展名将请求分发给不同的ISAPI处理. 流程如下: 1.IIS => aspnet_isapi阶段 ISAPI是一个底层的WIN32 API,开发者可以使用这些接口深入到IIS,让IIS支持各种其他处理程序.ISAPI是一个桥接口,通常用于高层次的工具与IIS之间的接驳.例如Windows下的Apache与Tomcat就是构建于ISAPI之上.ISAPI是

深入理解javascript作用域系列第一篇——内部原理

× 目录 [1]编译 [2]执行 [3]查询[4]嵌套[5]异常[6]原理 前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原理更为重要.本文是深入理解javascript作用域系列的第一篇——内部原理 内部原理分成编译.执行.查询.嵌套和异常五个部分进行介绍,最后以一个实例过程对原理进行完整说明 编译 以var a = 2;为例,说明javasc

SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>

一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都表示为数字,所以处理起来速度最快,遗憾的是,它并不总是如人们所想象,在WHERE子句中进行比较时,使用该选项会造成严重的混乱. 字典顺序:这种排序方式与在字典中看到的排序方式一样,但是少有不同,可以设置大量不同的额外选项来决定是否区分大小写.音调和字符集. 1.平衡树(B-树) 平衡树或B-树仅是提供了一种以

你必须知道ASP.NET知识------从IIS到httpmodule(第一篇)

一.写在前面 最近有时间,顺便将这系列洗完,接着上文:IIS各个版本知识总结 这篇文章原本计划写到HttpHandler为止,但限于篇幅就写到httpmodule 本文有不足之处,求指正,希望我能将它分析透彻. 二.回顾--我们还是从IIS说起 从上文(IIS各个版本知识总结)可以很清楚地意思到经典模式和集成模式的区别:集成模式是一个伟大的改进,让IIS集成了.NET功能(不在依靠之前IIS版本的aspnet_ISPAI.DLL). 所以,对于我们所开发的ASP.NET程序而言,这些完全不必知道

ASP.NET WebAPI框架解析第一篇

原文:ASP.NET WebAPI框架解析第一篇 ASP.NET WebAPI有两种寄宿模式,一种是WebHost,一种是SelfHost,为什么可以有两种模式的原因在于WebAPI有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象,便可以得到处理好的结果.而怎么去封装这个对象,如何得到这个对象就不是WebAPI所关心的了.在WebHost模式下,这个对象是由IIS+ASP.NET框架共同完成的,在SelfHost模式下,可以是任何可以完成HTTP消息响应和接收的应用程序,比如