zoukankan      html  css  js  c++  java
  • 页面请求处理管道 模拟

     

       在前面的博文中 我阐述了自己对页面生命周期的一些理解,我觉得自己可能还没有阐述清楚,因此我在这里模拟 Http 请求处理管道的一些过程,其实这些事件在 Global.asax 中是有体现的,我只是在这里将其细化,供大家更好的理解Http 请求处理管道的请求过程,以便在asp.net 应用处理程序完成自己的操作。

    Global.asax  中 有这样几个事件 

       

    View Code
       public class Global : System.Web.HttpApplication    {        
       protected void Application_Start(object sender, EventArgs e) { }        
       protected void Session_Start(object sender, EventArgs e)  {  }        
       protected void Application_BeginRequest(object sender, EventArgs e)  { }        
       protected void Application_AuthenticateRequest(object sender, EventArgs e){ }       
       protected void Application_Error(object sender, EventArgs e)  { }        
        protected void Session_End(object sender, EventArgs e){ }       
        protected void Application_End(object sender, EventArgs e) { }    }



    在几个事件中,我们就可以做我们自己想做的事情,比如对URL重写,就可以在 Application_BeginRequest 这个事件中处理,权限验证也可以在Application_AuthenticateRequest事件中处理,因此,了解页面生命周期可以帮助我们将应用程序写的更加完美,如同一位诗人写出美丽的诗句,是一样的道理。

    这是我参考别人的代码写出的对Http请求处理管道的模拟,其实大致和 全局处理程序 Global.asax 相差无几!!

    View Code
    class Program : System.ComponentModel.Component
    {
    static void Main(string[] args)
    {
    ProcessPripeline process = new ProcessPripeline();

    process.StartProcess += new EventHandler(process_StartProcess);
    process.PreProcess += new EventHandler(process_PreProcess);
    process.PostProcess += new EventHandler(process_PostProcess);
    process.EndProcess += new EventHandler(process_EndProcess);

    process.Process();

    }
    static void process_StartProcess(object sender, EventArgs e)
    {
    Console.WriteLine("开始处理的事件处理...");
    }
    static void process_EndProcess(object sender, EventArgs e)
    {
    Console.WriteLine("处理完成后的事件处理...");
    }

       static void process_PostProcess(object sender, EventArgs e)
    {
    Console.WriteLine("处理后的事件处理...");
    }

    static void process_PreProcess(object sender, EventArgs e)
    {
    Console.WriteLine("处理前...");
    }
    }


       

    View Code
     public class ProcessPripeline : System.ComponentModel.Component //提供 IComponent 接口的基实现并启用应用程序之间的对象共享。
    {

    private static readonly object startEvent = new object();
    private static readonly object prpeProcessEvent = new object();
    private static readonly object postProcessEvent = new object();
    private static readonly object endEvent = new object();


    public event EventHandler StartProcess//表示将处理不包含事件数据的事件的方法。
    {

    add {this.Events.AddHandler(startEvent,value); }
    remove { this.Events.RemoveHandler(startEvent, value); }

    }

    public event EventHandler PreProcess
    {
    add { this.Events.AddHandler(prpeProcessEvent, value); }
    remove { this.Events.RemoveHandler(prpeProcessEvent, value); }

    }


            public event EventHandler PostProcess
            {
                add { this.Events.AddHandler(postProcessEvent, value); }
                remove { this.Events.RemoveHandler(postProcessEvent, value); }
            }

            public event EventHandler EndProcess
            {
                add { this.Events.AddHandler(endEvent, value); }
                remove { this.Events.RemoveHandler(endEvent, value); }
            }

           

    View Code
    protected void OnStartProcess(EventArgs e)
    {
    if (this.Events[startEvent] != null)
    {
    (this.Events[startEvent] as EventHandler)(this, e);
    }
    }

    protected void OnpreProcess(EventArgs e)
    {
    if (this.Events[prpeProcessEvent] != null)
    {
    (this.Events[prpeProcessEvent] as EventHandler)(this, e);
    }
    }
    protected void OnPostProcess(EventArgs e)
    {
    if (this.Events[postProcessEvent] != null)
    {
    (this.Events[postProcessEvent] as EventHandler)(this, e);
    }
    }

    protected void OnEndProcess(EventArgs e)
    {
    if (this.Events[endEvent] != null)
    {
    (this.Events[endEvent] as EventHandler)(this, e);
    }
    }

    public void Process()
    {
    Console.WriteLine("start...");
    this.OnStartProcess(EventArgs.Empty);
    Console.WriteLine("begin handle...");
    this.OnpreProcess(EventArgs.Empty);
    Console.WriteLine("handling...");
    Console.WriteLine("handle ok");
    this.OnPostProcess(EventArgs.Empty);
    Console.WriteLine("ok");
    this.OnEndProcess(EventArgs.Empty);
    Console.Read();
    }
    }

    }

      

  • 相关阅读:
    android29
    android28
    android27
    android26
    Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
    Dynamics CRM Import Solution Attribute Display Name description is null or empty
    The service cannot be activated because it does not support ASP.NET compatibility
    IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明
    Unable to access the IIS metabase.You do not have sufficient privilege
    LM算法与非线性最小二乘问题
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/2247148.html
Copyright © 2011-2022 走看看