当用户在浏览器输入一个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 -> Asp.net (第一篇)的更多相关文章

  1. Asp.net原理(第一篇)

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

  2. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  4. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

  5. 深入理解javascript函数系列第一篇——函数概述

    × 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...

  6. 使用WSE实现Web Service安全----我的第一篇

    原文:使用WSE实现Web Service安全----我的第一篇 WSE(Web Services Enhancements)是微软为了使开发者通过.NET创建出更强大,更好用的Web Service ...

  7. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  8. 轻松学C#----第一篇笔记

    C#是微软公司推出的一种面向对象的开发语言,于2002年发布,经历了10年的发展,已经广泛应用于各种生产领域.以它为基础语言的ASP.NET已经称为主流网站开发技术.[入门] 共三章: 第一篇:C#概 ...

  9. 深入理解javascript函数系列第一篇

    前面的话 函数对任何一门语言来说都是核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即对象,程序可以随意操控它们.函数可以嵌套在其他函数中 ...

随机推荐

  1. BZOJ 1090 字符串折叠(区间DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1090 题意:字符串AAAAAAAAAABABABCCD的最短折叠为9(A)3(AB)CC ...

  2. 在C51中如何实现软复位?

    可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: vo ...

  3. MVC后台绑定dropdownList

     public ActionResult Index()         {             List<SelectListItem> items = new List<Se ...

  4. POJ_Fibonacci POJ_3070(矩阵快速幂入门题,附上自己写的矩阵模板)

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10521   Accepted: 7477 Descri ...

  5. sqlserver练习

    1.基本表的练习: create table Test( name ), age int, sex ) ) alter table Test ) alter table Test ) alter ta ...

  6. mac下显示隐藏文件

    一.在终端中 ls -a就可以查看隐藏文件. 显示和隐藏的命令例如以下: 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ...

  7. 批量创建prefab

    using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...

  8. [Ember] Wraming up

    1.1: <!DOCTYPE html> <html> <head> <base href='http://courseware.codeschool.com ...

  9. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service ...

  10. Linux :: vi E212: Can't open file for writing

    Linux :: vi E212: Can't open file for writing sysct1.conf 可能无写权限!查看方法:ls -lh /etc/sysct1.conf如果没有,则c ...