日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
三個(gè)方面詳細(xì)討論ASP.NET處理

我們分3個(gè)部分來(lái)討論ASP.NET處理過(guò)程。這里我們主要討論WebApplication以上的兩個(gè)部分。中間會(huì)對(duì)比IIS在A(yíng)sp.net中的角色。

創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、山亭網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、山亭網(wǎng)絡(luò)營(yíng)銷(xiāo)、山亭企業(yè)策劃、山亭品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供山亭建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18982081108,官方網(wǎng)址:www.cdcxhl.com

了解這些過(guò)程之后,我們就可以定義自己的WebServer。WebServer不是只有IIS的,沒(méi)了它,asp程序照樣過(guò)日子。
 
這里使用的例子是WebMatrix的WebHost的實(shí)現(xiàn)。通過(guò)修改這些類(lèi),來(lái)實(shí)現(xiàn)我自己的一個(gè)小功能:Host為每個(gè)WebApp分配一個(gè)ServiceManager的實(shí)例。(沒(méi)有版權(quán)問(wèn)題吧?)

第一部分:WebHost

從端口偵聽(tīng)請(qǐng)求,接受請(qǐng)求,形成HttpWorkerRequest

1:創(chuàng)建socket端口接聽(tīng)
listener而已。

2:創(chuàng)建WebHost
通過(guò).net提供的ApplicationHost.CreateApplicationHost(typeof(Host), virtualPath, physicalPath)靜態(tài)函數(shù)來(lái)創(chuàng)建Asp.net處理的宿主空間。
這個(gè)Host繼承自MarshalByRefObject,可以跨程序域調(diào)用。這是關(guān)鍵,因?yàn)槊總€(gè)WebApp會(huì)被分配一個(gè)AppDomain,進(jìn)行運(yùn)行。所以Host要可以創(chuàng)建這些AppDomain,并且可以調(diào)用。

3:實(shí)現(xiàn)抽象類(lèi)HttpWorkerRequest
.net提供了一個(gè)SimpleWorkerRequest的實(shí)現(xiàn)。簡(jiǎn)單的可以直接調(diào)用它。復(fù)雜一點(diǎn)的話(huà),需要自己重寫(xiě)更多的方法。
這個(gè)類(lèi)就是封裝了所有向下傳遞的屬性和數(shù)據(jù)。
這時(shí)WebHost和具體的每個(gè)WebApp的唯一連接點(diǎn)。

第二部分:處理HttpWorkerRequest

根據(jù)HttpWorkerRequest,實(shí)例化出HttpContext和IHttpHandler。這部分好像就進(jìn)了.net內(nèi)部的幾個(gè)類(lèi)了。不知道能不能在控制。

1:HttpRuntime的第一次處理
根據(jù)HttpWorkerRequest 創(chuàng)建context,根據(jù)contxt創(chuàng)建IHttpHandler實(shí)例,hanlder根據(jù)這個(gè)context開(kāi)始運(yùn)行。然后就到了網(wǎng)頁(yè)處理了。

通過(guò)調(diào)用System.Web.HttpRuntime.ProcessRequest(HttpWorkerRequest wr)靜態(tài)函數(shù)來(lái)進(jìn)入這個(gè)處理。

System.Web.HttpRuntime接受到HttpWorkerRequest對(duì)象??纯催@個(gè)函數(shù):

 
 
 
  1. publicstaticvoidProcessRequest(HttpWorkerRequestwr)  
  2. {  
  3. //忽略其他細(xì)節(jié)  
  4. HttpContextcontext1=newHttpContext(wr,false);  
  5. //根據(jù)HttpWorkerRequest創(chuàng)建context  
  6. IHttpHandlerhandler1=HttpApplicationFactory.GetApplicationInstance(context1);  
  7. //根據(jù)context創(chuàng)建App實(shí)例  
  8. handler1.ProcessRequest(context1);//運(yùn)行實(shí)例,參數(shù)是context。  

2:HttpContext(HttpWorkerRequest, false)
創(chuàng)建HttpContext,根據(jù)HttpWorkerRequest。
只看這兩句就行。
request=new HttpRequest(wr, this);
response=new HttpResponse(wr, this);

request和response都是依據(jù)wr構(gòu)造的。

3:再看看HttpRequest是如何構(gòu)造的
這是原代碼

 
 
 
  1. internalHttpRequest(HttpWorkerRequestwr,HttpContextcontext)  
  2. {  
  3. this._contentLength=-1;  
  4. this._wr=wr;  
  5. this._context=context;  

第三部分:網(wǎng)頁(yè)處理。

既然已經(jīng)產(chǎn)生了IHttpHandler和HttpContext了,剩下的就到了具體的每個(gè)WebApp了。

IHttpHandler之后就到了每個(gè)頁(yè)面了。成了WebApplition。具體的不說(shuō)了。
這時(shí)候的handler就已經(jīng)獲得了HttpContext了。

其中IIS作的,好像就是第一部分的功能,我們自己做一個(gè)宿主的話(huà),也主要是完成第一部分。

看看WebMatrix的這幾個(gè)類(lèi)的定義

1:WebMatrix.Server
這個(gè)類(lèi)是用來(lái)向外提供操作接口的類(lèi)。繼承自MarshalByRefObject。可以跨域調(diào)用。
主要操作:CreateHost(根據(jù)端口號(hào),虛擬目錄,物理根目錄等信息創(chuàng)建WebHost),StopWebServer(停止服務(wù)),StartWebServer(啟動(dòng)服務(wù))等
關(guān)鍵代碼:host=ApplicationHost.CreateApplicationHost(typeof(Host), this._virtualPath, this._physicalPath);者是用來(lái)創(chuàng)建Host的代碼。

2:WebMatrix.Host
這是為每個(gè)WebApp創(chuàng)建處理進(jìn)程空間的宿主類(lèi)。繼承自MarshalByRefObject
主要操作:
OnSocketAccept{new connection;connection.ProcessOneRequest(host,this);}
在接受到socket之后,調(diào)用處理請(qǐng)求

3:WebMatrix.Connection
連接處理
主要部分:調(diào)用Request

 
 
 
  1. rocessOneRequest()  
  2. {  
  3. Requestrequest1=newRequest(this._host,this,this._serviceManager);  
  4. request1.Process();  

4:WebMatrix.Request
重點(diǎn)。繼承自SimpleWorkerRequest。SimpleWorkerRequest繼承自HttpWorkerRequest。而HttpWorkerRequest就是宿主和WebApp唯一的連接點(diǎn),是WebApp唯一的入口參數(shù)。
這個(gè)類(lèi)主要重寫(xiě)Process方法,通過(guò)調(diào)用HttpRuntime.ProcessRequest(this)這句代碼來(lái)進(jìn)行WebApp的處理。

好了,現(xiàn)在來(lái)完成我自己的一個(gè)小功能
1:先獲取Matrix的WebServer的源代碼。通過(guò)Reflector工具。
2:修改Request類(lèi),就是那個(gè)繼承自SimpleWorkerRequest的那個(gè)類(lèi),加一個(gè)屬性:ServiceManager
3:修改Host和Server,使之可以向Request傳遞ServiceManager。
4:使用:在每個(gè)WebApp里可以這樣使用
IServiceProvider p=(IServiceProvider)HttpContext.Current;
Request wr=(Request)p.GetService(typeof(HttpWorkerRequest));
object o=wr.ServiceManager;
比如這是在一個(gè)網(wǎng)頁(yè)的page_load里面。

注意事項(xiàng)
1:物理根目錄
就像wwwroot一樣,使整個(gè)site的根目錄。比如c:\maxsoft.site

2:虛擬目錄
相對(duì)于根目錄之后的位置。比如c:\maxsoft.site\myTest的虛擬目錄就是/myTest

3:端口號(hào)
隨意制定,只要不和系統(tǒng)的沖突就可以。比如6066

4:訪(fǎng)問(wèn)方式
目標(biāo)機(jī)器:端口號(hào)/虛擬目錄/文件名。比如http://maxpc2/myTest/webform1.aspx

5:安裝
一定要在物理根目錄的bin文件夾里面放有本W(wǎng)ebServer程序。比如要把“Maxplatform.UI.Web.WebHost.dll”拷貝到c:\maxsoft.site\bin\目錄下。這個(gè)文件是編譯有WebHost類(lèi)的那個(gè)程序集。以上介紹ASP.NET處理過(guò)程。

【編輯推薦】

  1. ASP.NET頁(yè)面顯示XML數(shù)據(jù)
  2. 了解什么是IFRAME ASP.NET
  3. ASP.NET生命周期的展示
  4. 解決ASP.NET AJAX腳本的錯(cuò)誤問(wèn)題
  5. 詳解ASP.NET應(yīng)用程序

分享文章:三個(gè)方面詳細(xì)討論ASP.NET處理
文章出自:http://m.5511xx.com/article/cdhejse.html