剖析aspx请求的处理过程
1、客户在浏览器中输入login.aspx
2、把信息(info)提交到IIs
3、IIS初始化ASPNET_ISAPI.DLL并把info传给ASPnet_ISAPI的实例
4、ASPNET_ISAPI实例启动一个Asp.net工作进程(ASPNET_WP.exe),并把info传给aspnet_wp.exe
5、aspnet_wp.exe创建一个APPDOMAIN(.net程序的执行环境),并加载所需要的Assembly到APPDOMAIN中
同时创建ISAPIRuntime(负责解析出info信息然后传给IHttpRuntime对象)和IHttpRuntime对象
6、HTTPRuntime对象为每个请求者创建一个httpcontent(负责管理httpSession)、httpSession、httpApplication对象
7、httpApplication对象根据<machine.config>的<httphandler>节找到真正的处理请求的对象
Login类
8、httpruntime调用Login的ProcessRequest()方法
伪代码如下:
/// <summary>
/// 模拟asp.net的处理过程,以下代码全部是根据自己的理解写的
/// 帮助理解处理aspx请求的生命周期的伪代码,没有任何依据,给读者
/// 造成的误导不负任何责任
/// </summary>
public class HttpRuntime
{
public HttpRuntime(string info)
{
HttpContent content=new HttpContent();//每一个请求一个HttpContent
content.Session=new HttpSession();//HttpContent负责管理HttpSession
HttpApplication app=new HttpApplication();
HttpHandler handler=app.GetHandler(info);
//负责根据请求的Info找到真正的处理请求的HttpHandler类,在.net中所有的
//Web窗体都是从Page继承,page继承了HttpHandler接口
handler.ProcessRequest();//真正的HttpHandler处理请求
}
}
public class HttpContent
{
public HttpSession Session;
public HttpContent()
{
}
}
public class HttpSession
{
public HttpSession()
{
}
}
public class HttpApplication
{
public HttpApplication()
{
}
public HttpHandler GetHandler(string classname)
{
//根据动态特指等方法得到真实的HttpHandler的子类
return null;
}
}
public interface HttpHandler
{
void ProcessRequest();
}
public class Login:HttpHandler
{
public Login()
{
}
// HttpHandler 成员
public void ProcessRequest()
{
// TODO: 添加 Login.ProcessRequest 实现
OnInit();
LoadViewState();
OnLoad();
OnPreRender();
SaveViewState();
Render();
OnUnload();
Dispose();
}
public void OnInit()
{
}
public void LoadViewState()
{
}
public void OnLoad()
{
}
public void OnPreRender()
{
}
public void SaveViewState()
{
}
public void Render()
{
}
public void OnUnload()
{
}
public void Dispose()
{
}
}