asp.net本质论

问题:

1.浏览器请求IIS上静态资源与动态资源的区别?

2.什么是应用程序域?

3.什么是应用程序池?

 

一.IIS与ISAPI扩展

从浏览器请求IISWeb服务器)上的资源时,如果是静态资源,直接从文件系统中找到以字节流形式通过Http协议发送到浏览器;如果是动态资源,需要先处理然后发送。通过IIS映射ISAPI扩展和文件的方式,把每种文件扩展类型关联到特定的ISAPI扩展,也就是说,当一个请求某种文件的请求到达,IIS处理并转到相应的ISAPI扩展,以确认这种请求能被处理。

ISAPI扩展明显需要符合一个通用接口,这样他们才能被IIS调用并提供必要的数据用来处理请求和生成回送。

二.IIS5.X处理模型

windows2000以及XP系统上这是默认的处理模型。如上所说他有IIS inetinfo.exe进程默认在TCP端口80监听传入的HTTP请求并且把他们推送进队列等待处理。如果请求类型是asp.net,处理将委托给asp.net isapi扩展 aspnet_isapi.dll.这样轮流通过命名管道与asp.net工作进程通信,最终工作进程处理并传递请求到asp.net HTTP运行时环境。

 

两个进程间的通信通过命名管道(众所周知IPC[内部进程通信])机制建立。

IIS上每个Web应用程序,同时运行在aspnet_wp.exe中,它们通过AppDomain隔离。AppDomain本质上是一种提供独立和安全边界的受管制轻量级进程。每个IIS虚拟目录在一个APPDomain里执行,他将自动加载到工作进程只要资源是属于第一次请求的应用程序。

三.IIS6.0处理模型

最大改变出现应用程序池,每个应用程序池为一个单独的进程。它将一个或多个应用程序链接到一个或多个工作进程集合的配置。因为应用程序池中的应用程序与其他应用程序被工作进程边界分隔,所以某个应用程序池中的应用程序不会受到其他应用程序池中应用程序所产生的问题的影响。

简单的讲,一个应用程序池可以只包含一个应用程序,也可以包含多个应用程序,多个应用程序之间通过AppDomain隔离(两者可使用代理通信)。应用程序池都有自己的配置,在性能和可靠性得到了增强。

IIS6中,传入请求被处理并队列在核心级别来替换先前通过核心驱动调用http.sys的用户模式;这种方法有几个优势相对于先前的模式被叫作 kernel-level 请求队列。

一旦一个请求到达核心级别设备驱动http.sys,然后发送到相应的应用程序池队列,每个队列属于一个指定的应用程序池。

参考:

1.ASP.NET的本质之IIS

http://www.csharpwin.com/dotnetspace/6450r7684.shtml

2.ASP.NET 应用程序生命周期概述

http://msdn.microsoft.com/zh-cn/library/ms178473%28v=VS.80%29.aspx

3.ASP.NET工作原理

http://www.cnblogs.com/linjiancun/archive/2010/09/14/1825662.html

4.Asp.Net生命周期和Http管道技术 

http://www.cnblogs.com/refactor/archive/2012/07/06/2568742.html

5.ASP.NET应用程序与页面生命周期(精)

http://www.cnblogs.com/suizhouqiwei/archive/2012/08/15/2637775.html

6.ASP.NET管线与应用程序生命周期

http://www.knowsky.com/540549.html

 

原文地址:https://www.cnblogs.com/goahead777/p/2707998.html