簡述.Net管道通信簡介及應用

一、.Net管道通信簡介:

1)、管道通信結構:
在這裏插入圖片描述

2)、管道模型
管道模型就使用HttpApplicationFactory對象來創建一個HttpApplication對象來處理這個請求,一個HttpApplication可以包含一系列HTTP module對象。其中最重要的就是HttpModule和HttpHandler:
在這裏插入圖片描述

二、.Net管道通信實際運用

(一)、IIS5
請求Asp.Net
如果我們請求的是一個基於ASP.NET的資源:
1、加載aspnet_isapi.dll
2、創建工作進程(第一次請求)
3、加載CLR(第一次請求)
4、創建AppDomain(某個web應用的第一次請求)
5、執行ISAPIRuntime.
在這裏插入圖片描述

說明:
對於IIS 5.x來說,該工作進程爲aspnet_wp.exe。
aspnet_isapi.dll與工作進程之間通過命名管道(Named Pipes)進程通信,以獲得最好的性能。
對於寄宿於IIS 5.x的所有Web 應用都運行在同一個工作進程的不同AppDomain中。

(二)、IIS6
IIS5不足:
1、aspnet_isapi與進程之間是跨進程通信;
2、所有web應用都是同一個進程;
IIS6解決辦法:
1、將aspnet_isapi加載到工作進程。
2、建立應用程序池,一個程序池對應一個工作進程。
另外在IIS6中,創建新的http監聽器:HTTP協議棧(HTTP Protocol Stack,HTTP.SYS)
持續監聽:由於HTTP.SYS是一個網絡驅動程序,始終處於運行狀態,對於用戶的HTTP請求,能夠及時作出反應;
更好的穩定性:HTTP.SYS運行在操作系統內核模式下,並不執行任何用戶代碼,所以其本身不會受到Web應用、工作進程和IIS進程的影響;
內核模式下數據緩存:如果某個資源被頻繁請求,HTTP.SYS會把響應的內容進行緩存,緩存的內容可以直接響應後續的請求。由於這是基於內核模式的緩存,不存在內核模式和用戶模式的切換,響應速度將得到極大的改進。
請求Asp.Net
與IIS5.X不同的是:
1.W3SVC服務根據請求創建工作進程
2.aspnet_isapi.dll是在工作進程的初始化過程中被加載。
在這裏插入圖片描述

說明:
W3SVC服務已經從iis進程中脫離出來。http.sys接受到請求,將直接分發給w3svc服務
在IIS6中工作進程名爲w3wp.exe
工作進程的這種創建方式被稱爲請求式創建

(三)、IIS 7
1)、在IIS6中的W3SVC服務的功能
(1)HTTP請求接收:接收HTTP.SYS監聽到的HTTP請求;
(2)配置管理:從元數據庫(Metabase)中加載配置信息對相關組件進行配置;
(3)進程管理:創建、回收、監控工作進程。
在IIS7中W3SVC只負責第一個功能,剩餘功能交給WAS服務管理
IIS7引入Windows進程激活服務(Windows Process Activation Service,WAS):同時處理HTTP和非HTTP請求。
在WAS中,定義了一個重要的接口:監聽器適配器接口(Listener Adapter Interface)抽象出不同協議監聽器監聽到的請求。
WAS將監聽W3SVC服務的http請求以及WCF服務的TCP、Named Pipes、MSMQ3種請求.
在這裏插入圖片描述

說明
WCF提供的這3種監聽器和監聽適配器定義在程序集SMHost.exe中,你可以通過下面的目錄找到該程序集:%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation。
SMHost.exe提供了4個重要的Windows Service:
(1)NetTcpPortSharing:爲WCF提供TCP端口共享,關於端口共享;
(2)NetTcpActivator:爲WAS提供基於TCP的激活請求,包含TCP監聽器和對應的監聽適配器;
(3)NetPipeActivator:爲WAS提供基於命名管道的激活請求,包含命名管道監聽器和對應的監聽適配器;
(4)NetMsmqActivator:爲WAS提供基於MSMQ的激活請求,包含MSMQ監聽器和對應的監聽適配器。

2)、集成模式
傳統模式的缺點
(1)相同操作的重複執行:IIS與ASP.NET之間具有一些重複的操作,比如身份驗證;
(2)動態文件與靜態文件處理的不一致:因爲只有基於ASP.NET的動態文件(比如.aspx、.asmx、.svc等等)的HTTP請求才能通過ASP.NET ISAPI進入ASP.NET管道,而對於一些靜態文件(比如.html、.xml、.img等)的請求,則由IIS直接響應,那麼ASP.NET管道中的一些功能將不能用於這些基於靜態文件的請求,比如,我們希望通過Forms認證應用於基於圖片文件的請求;
(3)IIS難以擴展:對於IIS的擴展基本上就體現在自定義ISAPI,但是對於大部分人來說,這不是一件容易的事情。因爲ISAPI是基於Win32的非託管的API,並非一種面向應用的編程接口。通常我們希望的是諸如定義ASP.NET的HttpModule和HttpHandler一樣,通過託管代碼的方式來擴展IIS。
如圖:
在這裏插入圖片描述
實際上IIS7集成模式,就是讓用戶可以通過編寫託管代碼的module,把託管代碼插入到IIS內核代碼中來解析,方便大家精確控制任意請求,帶來更好的擴展性。
配置文件上的區別
在這裏插入圖片描述

三、Asp.Net管道

1、加載CLR:在工作進程中,ISAPI負責進行CLR的加載(如果.NET運行時尚未加載).
2、創建AppDomain:當成功加載了運行時後,會通過AppDomainFactory爲該Web應用創建一個應用程序域(AppDomain)。
3、執行ISAPIRuntime的int ProcessRequest(IntPtr ecb, int iWRType)方法
4、執行HttpRuntime的PR方法  
在這裏插入圖片描述
5、獲取httpapplication實例,調用httpapplication的pr方法
在這裏插入圖片描述
6、觸發httpapplication各事件

以上是我個人認知所得,不足之處,還望大神,大牛們指教~
參考地址:http://neverc.cnblogs.com/p/4807836.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章