天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇]

  ASP.NET Process Model索引

  • ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI
  • ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇]
  • ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[下篇]

  相信大家都使用過ASP.NET進行過基于Web的應用開發,ASP.NET是什么?如果站在一個相對High Level的角度,我們可以這樣來定義ASP.NETASP.NET是一個基于Web的開發平臺,提供構建企業級應用所需的Service、Programming Model和Software的Infrastructure。如果我們以一個Low Level的角度來看,它本質上就是一個消息處理器:他接受IIS(確切地說應該是ASP.NET ISAPI)Forward的Http Request (我們可以看成是一個Request Message),經過一系列的處理,最終產生一個用戶希望的Response(這也是一個Message,對于.ASPx Page來說是一個Html document,對于一個Web Service來說是一個Soap)。所以本篇文章的主要目的在于站在一個相對Low Level的角度介紹ASP.NET的整個Http Request Processing Model。我們訪問一個基于ASP.NET的資源,IIS是第一道屏障,在第一個部分我分別就IIS 5.x和IIS 6的差異介紹了IIS對Http Request的處理,今天我們來繼續后面的故事。

  一、從Unmanaged Environment到Managed Environment

  上一部分我們說到IIS收到一個基于ASP.NET資源文件的訪問,它會把Http Request交給一個ASP.NET ISAPI Extension處理。ASP.NET ISAPI 會加載CLR,從而創建一個托管的環境。ASP.NET ISAPI Extension定義在一個名為ASPNET_isapi.dll中,ASPNET_isapi.dll是一個純Native的、高效的Dll,也就是說,雖然ASP.NET ISAPI通過加載CLR創建一個托管的環境,但是ASP.NET ISAPI本省卻運行在一個Unmanaged的環境中。而我們的ASP.NET Application確是完全的Managed code,運行在一個Managed的環境中。要了解ASP.NET Http Runtime Pipeline這個純托管的Runtime,我們必須先了解從Unmanaged Environment到Managed Environment的這道橋梁。

  上圖簡單表述了在IIS 6環境下,從非托管環境到托管環境的過程。從圖中我們可以看到,ASP.NET ISAPI運行在一個非托管環境之中。ASP.NET ISAPI經過系列COM級別的class調用(由于這些被調用的Class都是一個個undocumented class,所以要真正說清楚調用流程中每個具體的細節是一件很難的事情,而且也確實沒有很大的必要去挖掘它,因為具體的實現可能會經常變動,如果對此具有好奇心的朋友可以通過一些Tool,比如Reflector去仔細研究一下),最終的調用降臨到一個托管的、繼承自System.Web.Hosting.ISAPIRuntime類的對象上。ISAPIRuntime 是一個特殊的class,他實現了Interface System.Web.Hosting.IISAPIRuntime。下面是該Interface的定義。通過定義我們可以看到,這是一個基于COM的Interface,也就是說Caller可以通過COM的方式調用實現該Interface的Class的對象。在這里,這個最初的Caller就是ASP.NET ISAPI。從這里我們可以總結出:ASP.NET ISAPI通過調用System.Web.Hosting.ISAPIRuntime Instance的ProcessRequest方法,進而從非托管的環境進入了托管的環境。

[ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("08a2c56f-7c16-41c1-a8be-432917a1a2d1")]
public interface IISAPIRuntime
{
void StartProcessing();
void StopProcessing();
[
return: MarshalAs(UnmanagedType.I4)]
int ProcessRequest([In] IntPtr ecb, [In, MarshalAs(UnmanagedType.I4)] int useProcessModel);
void DoGCCollect();
}

NET技術ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline[上篇],轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美狂野乱码一二三四区 | 亚洲在线中文无码首页 | 亚洲男同tv| 99国产在线精品视频 | 亚洲中文无码亚洲人在线观看- | 日韩内射美女人妻一区二区三区 | 九九大香尹人视频免费 | www.狠狠色 | 99久久免费只有精品 | 日韩亚洲中文欧美在线 | 色情内射少妇兽交 | 久久婷婷国产五月综合色啪最新 | 回复术士人生重启在线观看 | 琪琪热热色原日韩在线 | 欧美一级久久久久久久大 | 我要色色网 | 欧美亚洲日韩自拍高清中文 | 甜性涩爱免费下载 | 久久高清免费视频 | 99国产精品久久人妻无码 | 国产嫩草在线观看 | 理论片午午伦夜理片2021 | 亚洲在线无码免费观看 | 国产精品人妻无码久久久奥特曼 | 亚洲 欧美 综合 高清 在线 | 欧美双拳极限扩张 | 胸大美女又黄的网站 | 99成人在线视频 | 日本久久久免费高清 | 无羞耻肉动漫在线观看 | 日韩精品卡1卡2三卡四卡乱码 | 毛片免费观看视频 | 97国产成人精品视频 | 538视频这里只有精品 | 精品国产乱码久久久久久人妻 | 内射白嫩少妇超碰 | 色戒未删减版在线观看完整 | 久久青草在线视频精品 | 天天操天天干天天爽 | 哪灬你的鸣巴好大 | 久久热在线视频精品 |