• 剖析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()
      {
      }
     }

  • 相关阅读:
    mysql添加用户
    ubantu更新源
    内存的crash记录分析
    windows下sublime2 clojure环境配置
    服务器使用recast navigation
    网络库crash以及boost asio strand dispath分析
    CentOS7 监控进程网络流量工具安装
    vs2013提高编译速度
    Centos6.5 gitlab安装使用
    linux命令行将已有项目提交到github
  • 原文地址:https://www.cnblogs.com/kuailewangzi1212/p/805691.html
Copyright © 2020-2023  润新知