通過初步瀏覽全部代碼之後,我們大致上明白了:
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。