转载

Asp.net原理(第一篇)

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

流程如下:

Asp.net原理(第一篇)

1、IIS => aspnet_isapi阶段

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

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

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

如IIS7中的处理程序映射:

Asp.net原理(第一篇)

以上映射的意思是,将.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

正文到此结束
Loading...