CASSINI原始碼分析(5)——總結

來源:互聯網
上載者:User

通過初步瀏覽全部代碼之後,我們大致上明白了:

1、執行流。asp.net程式具體是如何執行的?一個asp.net的應用程式的執行首先是需要一個宿主,通過建立宿主後,就建立了執行asp.net應用代碼的能力。執行一次asp.net請求,需要通過HttpRuntime.ProcessRequest(SimpleWorkerRequest)來激發執行,而SimpleWorkerRequest需要被重載,將一次完整的http request執行個體化,並提供給asp.net運行庫以便正確處理使用者請求上下文關係以及使用者請求資料。SimpleWorkerRequest被重載的函數在asp.net的執行過程中按照http協議的規範被依次調用。

2、HTTP協議細節。我們實際上並沒有看到完整的http server的執行細節,因為具體的http請求執行是asp.net運行庫執行的(通過HttpRuntime.ProcessRequest),包括.htm之類的檔案都是被運行庫執行的,只不過運行庫發現不需要執行就直接讀取檔案返回。這個同IIS下的asp.net執行不一樣,IIS自己會在asp_WP.exe之前處理自己註冊的副檔名檔案請求。這個結果可能一樣,但是實質不一樣,就是普通檔案處理位置不一樣。所以,我們可以在cassini基礎之上自行處理部分屬於不需要動態解析的檔案,減輕asp.net運行庫的負擔,提高效率。

Cassini是一個asp.net的宿主程式,並非完整的web server。

3、asp.net是一個全新的執行環境,並非指令碼之前的指令碼技術,.net自身除了基礎架構外,還提供了執行aspx頁面的能力和相應組件。學習cassini就是學習如何使用.net架構提供的這種能力。就類似你研讀c代碼學習利用windows api編程一樣。

4、我們可以選擇IIS作為宿主,但是ISAPI啟動asp.net守護進程之後通過管道傳迴響應畢竟是在兩個進程間傳輸資料,況且,IIS自身也是漏洞一大筐,沒有其他需要,我們認為還是自己實現asp.net宿主並執行asp.net應用程式在效率上要高,況且應用程式定義域也提供了安全隔離。

5、學習如何使用多線程來滿足多線程公司專屬應用程式,回呼函數的使用也是精巧。

6、對於自己將來實現獨立於IIS的web應用開發有意義,譬如,可以採用asp.net開發方式開發案頭輔助應用。類似於HTMLView應用。我看到有人通過自己執行asp.net來快速產生介面運行案頭應用(方便將來迅速擴充到多使用者)。

當然,我自身也有疑問:

1、  為什麼採用ThreadPool,會不會導致並發訪問阻塞?

2、  可否更多的利用自己建立獨立的asp.net執行宿主?

3、  如何更通用化產生一個這樣的工具,我相信可以更加獨立化的。

歡迎聯絡我myjobsdk@yahoo.com.cn。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.