一个比较奇怪的问题!

       我们知道我们可以用堆栈上利用反射对程序执行过的方法进行跟踪,现在我作了一个比较奇怪的测试。
       我们建立一个Web Application,有一index.aspx页面!同时在Global中有Application_AuthenticateRequest方法。

现在我们在index.cs的page_load写上如下测试。
          // 在此处放置用户代码以初始化页面
   int i;
   string res = "";
   StackTrace st = new StackTrace();
   for (i=0;i<st.FrameCount;i++)
   {
    StackFrame sf;
       sf = st.GetFrame(i);
    MemberInfo mi;
                mi = sf.GetMethod();
                res = res + System.Environment.NewLine + "Method:" + mi.Name + ";NameSpace:" + mi.DeclaringType;
   }
   这里我们得到的res为(处理过):
"\r\nMethod:Page_Load;NameSpace:JiaJiCRM.Web.Login
\r\nMethod:OnLoad;NameSpace:System.Web.UI.Control
\r\nMethod:LoadRecursive;NameSpace:System.Web.UI.Control
\r\nMethod:ProcessRequestMain;NameSpace:System.Web.UI.Page
\r\nMethod:ProcessRequest;NameSpace:System.Web.UI.Page
\r\nMethod:ProcessRequest;NameSpace:System.Web.UI.Page
\r\nMethod:System.Web.HttpApplication+IExecutionStep.Execute;NameSpace:System.Web.HttpApplication+CallHandlerExecutionStep
\r\nMethod:ExecuteStep;NameSpace:System.Web.HttpApplication
\r\nMethod:ResumeSteps;NameSpace:System.Web.HttpApplication
\r\nMethod:System.Web.IHttpAsyncHandler.BeginProcessRequest;NameSpace:System.Web.HttpApplication
\r\nMethod:ProcessRequestInternal;NameSpace:System.Web.HttpRuntime
\r\nMethod:ProcessRequest;NameSpace:System.Web.HttpRuntime
\r\nMethod:ProcessRequest;NameSpace:System.Web.Hosting.ISAPIRuntime"
从这里我们可以看到执行到page_load这个方法的时候执行过的一些列方法!(按顺序的)
可是我们在这里并没有看到Application_AuthenticateRequest方法并没有在StackTrace中。如果我们将index中的方法放在Application_AuthenticateRequest中,我们是可以得到这个方法的。
例如:
\r\nMethod:Application_AuthenticateRequest;NameSpace:JiaJiCRM.Web.Global
\r\nMethod:System.Web.HttpApplication+IExecutionStep.Execute;NameSpace:System.Web.HttpApplication+SyncEventExecutionStep
\r\nMethod:ExecuteStep;NameSpace:System.Web.HttpApplication
\r\nMethod:ResumeSteps;NameSpace:System.Web.HttpApplication
\r\nMethod:System.Web.IHttpAsyncHandler.BeginProcessRequest;NameSpace:System.Web.HttpApplication
\r\nMethod:ProcessRequestInternal;NameSpace:System.Web.HttpRuntime
\r\nMethod:ProcessRequest;NameSpace:System.Web.HttpRuntime
\r\nMethod:ProcessRequest;NameSpace:System.Web.Hosting.ISAPIRuntime

这是为什么呢???

posted @ 2004-04-14 14:32  agaric  阅读(845)  评论(0编辑  收藏  举报