各版本IIS下ASP.net请求处理过程分析第1/3页
绝大多数的人只熟悉高层的框架如: WebForms 和 WebServices --这些都在ASP.NET层次结构在最高层。
这篇文章的资料收集整理自各种微软公开的文档,通过比较 IIS5、IIS6、IIS7 这三代 IIS 对请求的处理过程, 让我们熟悉 ASP.NET的底层机制 并对请求(request)是怎么从Web服务器传送到ASP.NET运行时有所了解。通过对底层机制的了解,可以让我们对 ASP.net 有更深的理解。
IIS 5 的 ASP.net 请求处理过程
对图的解释:
IIS 5.x 一个显著的特征就是 Web Server 和真正的 ASP.NET Application 的分离。作为 Web Server 的IIS运行在一个名为 InetInfo.exe 的进程上,InetInfo.exe 是一个Native Executive,并不是一个托管的程序,而我们真正的 ASP.NET Application 则是运行在一个叫做 aspnet_wp 的 Worker Process 上面,在该进程初始化的时候会加载CLR,所以这是一个托管的环境。
ISAPI: 指能够处理各种后缀名的应用程序。 ISAPI 是下面单词的简写 :Internet Server Application Programe Interface,互联网服务器应用程序接口。
IIS 5 模式的特点:
- 首先,同一台主机上在同一时间只能运行一个 aspnet_wp 进程,每个基于虚拟目录的 ASP.NET Application 对应一个 Application Domain ,也就是说每个 Application 都运行在同一个 Worker Process 中,Application之间的隔离是基于 Application Domain 的,而不是基于Process的。
- 其次,ASP.NET ISAPI 不但负责创建 aspnet_wp Worker Process,而且负责监控该进程,如果检测到 aspnet_wp 的 Performance 降低到某个设定的下限,ASP.NET ISAPI 会负责结束掉该进程。当 aspnet_wp 结束掉之后,后续的 Request 会导致ASP.NET ISAPI 重新创建新的 aspnet_wp Worker Process。
- 最后,由于 IIS 和 Application 运行在他们各自的进程中,他们之间的通信必须采用特定的通信机制。本质上 IIS 所在的 InetInfo 进程和 Worker Process 之间的通信是同一台机器不同进程的通信(local interprocess communications),处于Performance的考虑,他们之间采用基于Named pipe的通信机制。ASP.NET ISAPI和Worker Process之间的通信通过他们之间的一组Pipe实现。同样处于Performance的原因,ASP.NET ISAPI 通过异步的方式将Request 传到Worker Process 并获得 Response,但是 Worker Process 则是通过同步的方式向 ASP.NET ISAPI 获得一些基于 Server 的变量。
IIS6 的 ASP.net 请求处理过程
对图的解释:
IIS 5.x 是通过 InetInfo.exe 监听 Request 并把Request分发到Work Process。换句话说,在IIS 5.x中对Request的监听和分发是在User Mode中进行,在IIS 6中,这种工作被移植到kernel Mode中进行,所有的这一切都是通过一个新的组件:http.sys 来负责。
注:为了避免用户应用程序访问或者修改关键的操作系统数据,windows提供了两种处理器访问模式:用户模式(User Mode)和内核模式(Kernel Mode)。一般地,用户程序运行在User mode下,而操作系统代码运行在Kernel Mode下。Kernel Mode的代码允许访问所有系统内存和所有CPU指令。
在User Mode下,http.sys接收到一个基于 aspx 的http request,然后它会根据IIS中的 Metabase 查看该基于该 Request 的 Application 属于哪个Application Pool, 如果该Application Pool不存在,则创建之。否则直接将 request 发到对应Application Pool 的 Queue中。
每个 Application Pool 对应着一个Worker Process:w3wp.exe,毫无疑问他是运行在User Mode下的。在IIS Metabase 中维护着 Application Pool 和worker process的Mapping。WAS(Web Administrative service)根据这样一个mapping,将存在于某个Application Pool Queue的request 传递到对应的worker process(如果没有,就创建这样一个进程)。在 worker process 初始化的时候,加载ASP.NET ISAPI,ASP.NET ISAPI 进而加载CLR。最后的流程就和IIS 5.x一样了:通过AppManagerAppDomainFactory 的 Create方法为 Application 创建一个Application Domain;通过 ISAPIRuntime 的 ProcessRequest处理Request,进而将流程进入到ASP.NET Http Runtime Pipeline。
123下一页阅读全文
栏 目:Windows
下一篇:ASP.NET Process Model之一 IIS 和 ASP.NET ISAPI
本文标题:各版本IIS下ASP.net请求处理过程分析第1/3页
本文地址:https://idc91.com/fuwuqizl/2760.html
您可能感兴趣的文章
- 11-07关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
- 11-07WinServer2012搭建DNS服务器的方法步骤
- 11-07Win Server2016远程桌面如何允许多用户同时登录
- 11-07windows server 2012安装FTP并配置被动模式指定开放端口
- 11-07winserver2019安装软件一直卡在应用程序正在为首次使用做准备
- 11-07win server2012 r2服务器共享文件夹如何设置
- 11-07Windows Server 2022 超融合部署(图文教程)
- 11-07Windows server 2022创建创建林、域树、子域的步骤
- 11-07Windows server 2012 NTP时间同步的实现
- 11-07windows server 2016 域环境搭建的方法步骤(图文)
阅读排行
- 1关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e
- 2WinServer2012搭建DNS服务器的方法步骤
- 3Win Server2016远程桌面如何允许多用户同时登录
- 4windows server 2012安装FTP并配置被动模式指定开放端口
- 5winserver2019安装软件一直卡在应用程序正在为首次使用做准备
- 6win server2012 r2服务器共享文件夹如何设置
- 7Windows Server 2022 超融合部署(图文教程)
- 8Windows server 2022创建创建林、域树、子域的步骤
- 9Windows server 2012 NTP时间同步的实现
- 10windows server 2016 域环境搭建的方法步骤(图文)
推荐教程
- 05-27Windows Server 2012 没有远程桌面授权服务器可以提供许可证,远程会话被中
- 06-12windows2008+iis7环境SSL部署https证书
- 06-12windows2003系统如何部署SSL证书站点https访问
- 05-27Win10下配置IIS10并支持调试ASP程序的步骤
- 05-27Windows 2008任务计划执行bat脚本失败返回0x1的解决方法
- 11-07windows server2016安装oracle 11g的图文教程
- 11-07Windows server 2012 NTP时间同步的实现
- 05-27IIS 完全重装操作步骤
- 11-07windows server 2019 无法安装AMD Radeon RX 6600 XT
- 11-07Windows Server 2022 超融合部署(图文教程)