成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

三個方面詳細討論ASP.NET處理

開發 后端
本文分3個部分來討論ASP.NET處理過程,這里我們主要討論WebApplication以上的兩個部分,中間會對比IIS在ASP.NET中的角色。

我們分3個部分來討論ASP.NET處理過程。這里我們主要討論WebApplication以上的兩個部分。中間會對比IIS在Asp.net中的角色。

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

第一部分:WebHost

從端口偵聽請求,接受請求,形成HttpWorkerRequest

1:創建socket端口接聽
listener而已。

2:創建WebHost
通過.net提供的ApplicationHost.CreateApplicationHost(typeof(Host), virtualPath, physicalPath)靜態函數來創建Asp.net處理的宿主空間。
這個Host繼承自MarshalByRefObject,可以跨程序域調用。這是關鍵,因為每個WebApp會被分配一個AppDomain,進行運行。所以Host要可以創建這些AppDomain,并且可以調用。

3:實現抽象類HttpWorkerRequest
.net提供了一個SimpleWorkerRequest的實現。簡單的可以直接調用它。復雜一點的話,需要自己重寫更多的方法。
這個類就是封裝了所有向下傳遞的屬性和數據。
這時WebHost和具體的每個WebApp的唯一連接點。

第二部分:處理HttpWorkerRequest

根據HttpWorkerRequest,實例化出HttpContext和IHttpHandler。這部分好像就進了.net內部的幾個類了。不知道能不能在控制。

1:HttpRuntime的第一次處理
根據HttpWorkerRequest 創建context,根據contxt創建IHttpHandler實例,hanlder根據這個context開始運行。然后就到了網頁處理了。

通過調用System.Web.HttpRuntime.ProcessRequest(HttpWorkerRequest wr)靜態函數來進入這個處理。

System.Web.HttpRuntime接受到HttpWorkerRequest對象。看看這個函數:

  1. publicstaticvoidProcessRequest(HttpWorkerRequestwr)  
  2. {  
  3. //忽略其他細節  
  4. HttpContextcontext1=newHttpContext(wr,false);  
  5. //根據HttpWorkerRequest創建context  
  6. IHttpHandlerhandler1=HttpApplicationFactory.GetApplicationInstance(context1);  
  7. //根據context創建App實例  
  8. handler1.ProcessRequest(context1);//運行實例,參數是context。  

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

request和response都是依據wr構造的。

3:再看看HttpRequest是如何構造的
這是原代碼

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

第三部分:網頁處理。

既然已經產生了IHttpHandler和HttpContext了,剩下的就到了具體的每個WebApp了。

IHttpHandler之后就到了每個頁面了。成了WebApplition。具體的不說了。
這時候的handler就已經獲得了HttpContext了。

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

看看WebMatrix的這幾個類的定義

1:WebMatrix.Server
這個類是用來向外提供操作接口的類。繼承自MarshalByRefObject。可以跨域調用。
主要操作:CreateHost(根據端口號,虛擬目錄,物理根目錄等信息創建WebHost),StopWebServer(停止服務),StartWebServer(啟動服務)等
關鍵代碼:host=ApplicationHost.CreateApplicationHost(typeof(Host), this._virtualPath, this._physicalPath);者是用來創建Host的代碼。

2:WebMatrix.Host
這是為每個WebApp創建處理進程空間的宿主類。繼承自MarshalByRefObject
主要操作:
OnSocketAccept{new connection;connection.ProcessOneRequest(host,this);}
在接受到socket之后,調用處理請求

3:WebMatrix.Connection
連接處理
主要部分:調用Request

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

4:WebMatrix.Request
重點。繼承自SimpleWorkerRequest。SimpleWorkerRequest繼承自HttpWorkerRequest。而HttpWorkerRequest就是宿主和WebApp唯一的連接點,是WebApp唯一的入口參數。
這個類主要重寫Process方法,通過調用HttpRuntime.ProcessRequest(this)這句代碼來進行WebApp的處理。


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

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

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

3:端口號
隨意制定,只要不和系統的沖突就可以。比如6066

4:訪問方式
目標機器:端口號/虛擬目錄/文件名。比如http://maxpc2/myTest/webform1.aspx

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

【編輯推薦】

  1. ASP.NET頁面顯示XML數據
  2. 了解什么是IFRAME ASP.NET
  3. ASP.NET生命周期的展示
  4. 解決ASP.NET AJAX腳本的錯誤問題
  5. 詳解ASP.NET應用程序
責任編輯:佚名 來源: 網易空間
相關推薦

2009-07-22 18:08:00

ASP.NET基類

2009-08-03 17:35:07

ASP.NET WebASP.NET編程工具

2009-12-11 14:57:56

ASP.NET

2009-12-18 16:51:41

ASP.NET概述

2012-03-31 10:59:02

ASP.NET

2009-10-23 17:40:24

VB.NET繪圖方法

2009-10-30 14:03:59

ASP.NET上傳文件

2009-08-05 16:04:50

2009-02-06 14:11:36

ASP.NET.NET全局異常處理

2009-07-20 16:04:37

ASP.NET fra

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2011-06-28 15:06:09

ASP.NET網站優化

2009-07-28 17:29:14

ASP.NET優點

2009-08-04 16:06:19

ASP.NET代碼分離

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-12-10 17:47:01

ASP.NET 2.0

2011-07-04 15:33:15

ASP.NET

2011-07-06 11:15:09

ASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男女网站在线观看 | 精品国产一区二区三区日日嗨 | 国产精品特级毛片一区二区三区 | 国产一区不卡在线观看 | 国精产品一区二区三区 | 欧美一区二区视频 | 日韩免费视频一区二区 | 麻豆91av | 国产精品成人一区二区三区夜夜夜 | 精品综合久久久 | 在线观看的av | 亚洲精品视频一区 | 久久99精品视频 | 国产精久久久久久久 | 国产无套一区二区三区久久 | 中文字幕国产精品 | 国产精品1区 | 91私密视频 | 欧美日韩精品在线免费观看 | 久久一区二区三区电影 | 成人av在线播放 | 黄色av观看| 国产一区二区三区免费观看视频 | 国产一区二区欧美 | 亚洲精品视频在线看 | 久久久www成人免费精品 | 国产精品3区| 精品久久久久一区二区国产 | 人人爽人人草 | 一区二区在线不卡 | 一区二区中文字幕 | 国产精品99久久久久久宅男 | 久久国产高清视频 | 国产成人自拍av | 国产91在线精品 | 日韩成人 | 亚洲精品久久久9婷婷中文字幕 | 亚洲精品一区二区三区蜜桃久 | 成人欧美一区二区三区黑人孕妇 | 伊人爽| 91亚洲国产成人久久精品网站 |