了解IHttpModule接口事件执行

理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间)

一:简要介绍一下asp.net的执行步骤

1.IIS接收到客户请求

2. IIS把请求交给aspnet_isapi.dll处理

3.(如果是第一次运行程序)装载bin目录中的dll

4.(如果是第一次运行程序)读取各级webconfig中的配置

5.(如果是第一次运行程序)编译装载global.asax,初始化HttpApplication实例

6.创建响应请求的HttpContext

7.创建承载响应结果的HttpTextWriter

8.找到合适的HttpHandler(asp.net页面),处理http请求

9.处理session,异常

10.把处理结果反馈个客户

当HttpApplication实例创建后,
会调用InitModules()方法,
这个方法会根据webconfig文件中的配置调用相应的HttpModule
这就是可定制的HttpModule

二:通过定制HttpModule来计算页面执行时间


当HttpApplication创建HttpModule时
将会执行HttpModule的Init方法
在这个方法中,可以订阅多个事件
如下:
BeginRequest
AuthenticateRequest 当安全模块已建立用户标识时发生。
PostAuthenticateRequest
AuthorizeRequest 当安全模块已验证用户授权时发生。
PostAuthorizeRequest
ResolveRequestCache
PostResolveRequestCache
PostMapRequestHandler
AcquireRequestState
PostAcquireRequestState
PreRequestHandlerExecute

PostRequestHandlerExecut
e
ReleaseRequestState
PostReleaseRequestState
EndRequest
这些事件也是HttpApplication处理管线中的各种事件
常用的就是BeginRequest和EndRequest

下面我们做一个例子来实现计算页面的执行时间
先看webconfig的代码

ersionxmlversion="1.0"?>   
 
  
 
          
 
         
 
             
 
         
 
     

 

xland是我创建的一个类库,命名空间为xland
MyModule为该类库下的一个类实现了IHttpModules接口
下面看这个类的代码:


 

using System; 
 
usingSystem.Collections.Generic; 
 
usingSystem.Web;//引用web命名空间 
  
using System.Text; 
 
namespace xland 
 
 
 
   public classMyModule:IHttpModule//继承IHttpModules   
 
    
 
         
 
      public void Init(HttpApplicationapplication)//实现IHttpModules中的Init事件   
 
        
 
          //订阅两个事件   
 
           application.BeginRequest +=newEventHandler(application_BeginRequest);  
 
           application.EndRequest+=newEventHandler(application_EndRequest);  
 
        
 
      private DateTimestarttime;  
 
      private void application_BeginRequest(object sender, EventArgse)  
 
        
 
          //objectsender是BeginRequest传递过来的对象   
 
          //里面存储的就是HttpApplication实例   
 
          //HttpApplication实例里包含HttpContext属性   
 
           starttime = DateTime.Now;  
 
           HttpApplication application =(HttpApplication)sender;  
 
           HttpContext context =application.Context;  
 
           context.Response.Write("开始计时,现在的时间为:" +starttime.ToString("yyyy年MM月dd日HH:mm:ss.fff") +"
"); 
 
 
        
 
      private void application_EndRequest(object sender, EventArgse) 

你可能感兴趣的:(ASP.NET原理)