一:理解ASP.NET的運行機制(例:通過HttpModule來計算頁面執行時間)

來源:互聯網
上載者:User

一:簡要介紹一下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
PostRequestHandlerExecute
ReleaseRequestState
PostReleaseRequestState 
EndRequest
這些事件也是HttpApplication處理管線中的各種事件
常用的就是BeginRequest和EndRequest

下面我們做一個例子來實現計算頁面的執行時間
先看webconfig的代碼

 

 

<?xmlversionxmlversionxmlversionxmlversion="1.0"?>    
<configuration>    
    <system.web>         
        <httpModules>    
            <add name="MyModule" type="xland.MyModule"/>    
        </httpModules>    
    </system.web>    
</configuration> 

xland是我建立的一個類庫,命名空間為xland
MyModule為該類庫下的一個類實現了IHttpModules介面
下面看這個類的代碼:

 

 

using System;   
using System.Collections.Generic;   
using System.Web;//引用web命名空間    
using System.Text;   
namespace xland   
{   
    public class MyModule:IHttpModule//繼承IHttpModules    
    {   
           
        public void Init(HttpApplication application)//實現IHttpModules中的Init事件    
        {   
            //訂閱兩個事件    
            application.BeginRequest +=new EventHandler(application_BeginRequest);   
            application.EndRequest+=new EventHandler(application_EndRequest);   
        }   
        private DateTime starttime;   
        private void application_BeginRequest(object sender, EventArgs e)   
        {   
            //object sender是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") + "<br>");   
        }   
        private void application_EndRequest(object sender, EventArgs e)   
        {   
            DateTime endtime = DateTime.Now;   
            HttpApplication application = (HttpApplication)sender;   
            HttpContext context = application.Context;   
            context.Response.Write("計時結束,現在的時間為:" + endtime.ToString("yyyy年MM月dd日HH:mm:ss.fff") + "<br>");   
            context.Response.Write("頁面執行時間:" + (endtime - starttime).ToString());   
        }   
        //必須實現dispose介面    
        public void Dispose() { }   
    }   

 

好其他的都不用管,我們在default.aspx中做一些耗時的操作

注意在web應用程式類庫中一定要添加xland的引用

using System;   
using System.Collections;   
using System.Configuration;   
using System.Data;   
using System.Web;   
using System.Web.Security;   
using System.Web.UI;   
using System.Web.UI.HtmlControls;   
using System.Web.UI.WebControls;   
using System.Web.UI.WebControls.WebParts;   
namespace _1   
{   
    public partial class _Default : System.Web.UI.Page   
    {   
        protected void Page_Load(object sender, EventArgs e)   
        {   
            for (int i = 1; i < 10000; i++)   
            {                   
                Response.Write(i);   
                if (i % 100 == 0) { Response.Write("<br>"); }   
            }   
        }   
    }   
}  BeginRequest和EndRequest裡可以做很多事情

比如處理cookie的domain等
等具體需要的時候要能想到這裡來

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.