HTTP -> 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与辅助进程的通信:
- aspnet_isapi和辅助进程间的通讯是使用一组 "命名管道" 进行的,命名管道 是一种Win32机制,用于跨进程边界传输机制,命名管道的工作方式。与管道相似:在一端传入数据,在另一端输出相同的数据.建立管道既可以连接本地进程,也可以连接远程计算机上运行的进程,对于本地进程间通讯,管道是Windows中最有效,最灵活的工具。
- ISAPI使用异步命名管道来将请求转发给辅助进程并获得响应。
- 辅助进程 在需要查询有关IIS环境的信息(即服务器变量)时又使用同步管道。
- ISAPI模块创建固定数量的命名管道,并使用重叠的操作以通过小的线程池,处理同一时间进行的连接。当通过管道进行的数据交换操作结束后,完成例程,将断开客户端,并重新使用管道实例为新的客户端服务。线程池和重叠操作均可以保证使ASP.NET ISAPI的性能达到令人满意的水平。 aspnet_isapi绝不会处理Http请求。
IIS与aspnet_isapi的处理逻辑:
- 当请求到达时,IIS检查资源类型并调用aspnet_isapi扩展。如果启用了默认的进程模型。aspnet_isapi会将请求排队。并将请求分配给辅助进程、所有的请求数据都是通过异步I/O发送。
- 收到请求后,ASP.NET辅助进程将通知aspnet_isapi,它将为请求服务(建立管道)。
- 在辅助进程的上下文中执行请求。有时,辅助进程可能需要回调aspnet_isapi以完成请求,也就是需要说枚举服务器变量。这种情况下,辅助进程将使用同步管道,因为这样可以保持请求处理的逻辑顺序。
- 完成后,响应被发送到打开了异步管道的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开发就是从这个地方开始。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。