?
asp.net請求響應模型原理隨記回顧:
根據(jù)一崇敬的講師總結:(會存在些錯誤,大家可以做參考)
1.-當在瀏覽器輸入url后,客戶端會將請求根據(jù)http協(xié)議封裝成為http請求報文。并通過主socket創(chuàng)建新的socket對象傳輸請求報文。(請求服務器端的端口為80端口)
2.當socket到達80端口后,這時監(jiān)聽80端口的socket會創(chuàng)建新的socket代理來,開辟新的socket端口,進行通信,請求報文信息會被操作系統(tǒng)的內核模式kernalModel的http.sys(驅動級別)進行解析并負責將請求分發(fā)具體的處理程序。(http.sys其實可以看做是插件模型,即管道模型,通過系統(tǒng)注冊表向這個管道注冊處理程序,這樣請求信息就會被注冊處理程序截獲過濾執(zhí)行)。
3.http.sys解析出請求時80端口并根據(jù)注冊表找到對應處理程序,之后交給了寄宿在svchost.exe中的w3svc服務,它會判斷請求文件的后綴,如果是靜態(tài)頁,js等靜態(tài)資源,便直接在iis內部處理再通過通信端口返回響應信息。如果是.aspx,就會找到相應的處理程序(可以看出iis也是插件模型)即aspnet_isapi.dll(非托管用c++寫的)。
4. aspnet_isapi.dll會通過ecb操作系統(tǒng)句柄(標志系統(tǒng)一些資源)這樣托管環(huán)境就能訪問報文信息(可以看出aspnet_isapi.dll是托管和非托管環(huán)境的一個橋梁);之后傳給isapiruntime,通過ecb指針創(chuàng)建一個httpworkrequest對象(對http報文做最初的封裝處理)之后再交給httpruntime對象,它會對httpworkrequest對象做進一步封裝,通過創(chuàng)建httpcontext,將httpworkrequest封裝到httpcontext的httprequest對象中(返回的相應報文會封裝到httpcontext的httpresponse中)。
5.之后HttpApplicationFactory創(chuàng)建一個HttpApplication管道(這里使用了對象池,因為HttpApplication通過反射創(chuàng)建好資源,如果對象池中有的話,直接取出來,和線程池,應用程序池,一般處理程序池都是一樣的,httpapplication管道當然也是插件模型了,通過httpModule注冊事件),這時httpcontext會流經這個管道,注冊的處理程序便可以截獲過濾httpcontext了。(httpallication共有23個事件,19個事件可以讓開發(fā)者使用,-httpapplication的第7個事件獲得緩存,8事件:創(chuàng)建最終處理當前請求的handler實例;在11和12個事件之間會調用執(zhí)行一般處理程序(handler的pr方法處理請求);)
?
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
