ASP.NET Web Garden模型
Web Garden模型
Web Garden模型可以通過 machine.config 檔案中的
常言道“閃光的不都是金子”,用在這裡很合適。Web Garden 模式使得多個輔助程式可以同時執行。但是,需要注意的是所有程式都會有自己的應用程式狀態、程式內會話狀態、ASP.NET 快取、靜態資料以及執行應用程式所需的其他內容。啟用 Web Garden 模式之後,ASP.NET ISAPI 將根據 CPU 的數量儘可能多地啟動輔助程式,每個輔助程式都是下一程式的完整克隆(每一程式都與相應的 CPU 密切相關)。為平衡工作負荷,傳入的請求以單迴圈的方式在執行的程式之間進行劃分。輔助程式就象在單處理器中一樣被回收。請注意,ASP.NET 繼承了作業系統中所有的 CPU 使用限制,並且不包括實現限制的自定義語義。
總之,Web Garden模型並不適用於所有應用程式。應用程式的狀態越多,其的效能損失也越多。工作資料儲存在共享記憶體的塊中,以便一個程式輸入的變化可以立即被其他程式得知。但是,處理請求時,工作資料被複制到程式的上下文中。因此,各個輔助程式將處理自己的工作資料,而應用程式的狀態越多,效能損失就越大。鑑於此,仔細、明智的應用程式基準測試是絕對必要的。
只有重啟 IIS 後,對配置檔案中
HTTP 管道
ASP.NET ISAPI 擴充套件啟動輔助程式後,它將傳遞部分命令列引數。輔助程式使用這些引數來執行載入 CLR 前需要執行的任務。傳遞的值包括:COM 和 DCOM 安全性所要求的身份驗證等級、可以使用的命名管道的數量和 IIS 程式標識。命名管道的名稱是使用 IIS 程式標識和允許的管道數隨機生成的。輔助程式不接收可用管道的名稱,但可以接收識別管道名稱所需的資訊。
COM 和 DCOM 安全性與 Microsoft® .NET Framework 有何關係?實際上,CLR 是作為 COM 物件提供的。更準確地說,CLR 本身不是由 COM 程式碼構成的,但是指向 CLR 的介面卻是一個 COM 物件。因此,輔助程式載入 CLR 的方式與載入 COM 物件的方式相同。
當 ASPX 請求遇到 IIS 時,Web 伺服器將根據選擇的身份驗證模型(匿名、Windows、Basic 或 Digest)來分配一個令牌。當輔助程式收到要處理的請求時,令牌被傳遞到輔助程式。請求由輔助程式中的執行緒獲取。該執行緒從最初獲取傳入請求的 IIS 執行緒繼承身份令牌。在 aspnet_wp.exe 中,負責處理請求的實際帳戶取決於在特殊的 ASP.NET 應用程式中是如何配置模擬的。如果模擬被禁用(預設設定),則執行緒將在輔助程式的帳戶下執行。預設情況下,該帳戶在 ASP.NET 程式模型中為 ASPNET,在 IIS 6 程式模型中為 NETWORKSERVICE。這兩個帳戶都是“弱”帳戶,提供的功能比較有限,可以有效抵擋回復性攻擊 (Revert-to-self Attack)。(回覆性攻擊是指將模擬的客戶端的安全性令牌回覆到父程式令牌。為輔助程式分配弱帳戶可以挫敗此類攻擊。)
高度概括起來,ASP.NET 輔助程式完成的一項主要任務就是將請求交給一系列稱為的 HTTP 管道的託管物件。要啟用 HTTP 管道,可以建立一個 HttpRuntime 類的新例項,然後呼叫其 ProcessRequest 方法。如前所述,ASP.NET 中始終只執行一個輔助程式(除非啟用了 Web Garden模型),該程式在獨立的 AppDomain 中管理所有的 Web 應用程式。每個 AppDomain 都有自己的 HttpRuntime 類例項,即管道中的輸入點。HttpRuntime 物件初始化一系列有助於實現請求的內部物件。Helper 物件包括快取管理器(Cache 物件)和內部檔案系統監視器(用於檢測構成應用程式的原始檔的更改)。HttpRuntime 為請求建立上下文,並用與請求相關的 HTTP 資訊填充上下文。上下文用 HttpContext 類的例項來表示。
另一個在 HTTP 執行時的設定初期建立的 Helper 物件是文字書寫器,用於包含瀏覽器的響應文字。文字書寫器是 HttpWriter 類的例項,此物件對頁面程式碼以程式設計方式傳送的文字進行快取。HTTP 執行時被初始化後,它將查詢實現請求的應用程式物件。應用程式物件是 HttpApplication 類的例項,該類就是 global.asax 檔案背後的類。global.asax 在程式設計時是可選的,但在構建結構時是必需的。因此,如果應用程式中沒有構建類,則必須使用預設物件。ASP.NET 執行時包括幾個中間工廠類,可以用來查詢並返回有效的 Handler 物件以處理請求。整個過程中用到的第一個工廠類是 HttpApplicationFactory。它的主要任務是使用 URL 資訊來查詢 URL 虛擬目錄和彙集的 HttpApplication 物件之間的匹配關係。
應用程式工廠類的行為可以概括為以下幾點:
1. 工廠類維護 HttpApplication 物件池,並使用它們來處理應用程式的請求。池的壽命與應用程式的壽命相同。
2. 應用程式的第一個請求到達時,工廠類提取有關應用程式型別的資訊(global.asax 類)、設定用於監視更改的檔案、建立應用程式狀態並觸發 Application_OnStart 事件。
3. 工廠類從池中獲取一個 HttpApplication 例項,並將要處理的請求放入例項中。如果沒有可用的物件,則建立一個新的 HttpApplication 物件。要建立 HttpApplication 物件,需要先完成 global.asax 應用程式檔案的編譯。
4. HttpApplication 開始處理請求,並且只能在完成這個請求後才能處理新的請求。如果收到來自同一資源的新請求,則由池中的其他物件來處理。
5. 應用程式物件允許所有註冊的 HTTP 模組對請求進行預處理,並找出最適合處理請求的處理程式型別。這通過查詢請求的 URL 的擴充套件和配置檔案中的資訊來完成。
HTTP 處理程式是一些實現 IHttpHandler 介面的類。.NET Framework 為常見的資源型別提供了一些預定義的處理程式,包括 ASPX 頁面和 Web 服務。machine.config 檔案中的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-610964/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ASP.NET路由模型解析ASP.NET路由模型
- ASP.NET Web API 特性ASP.NETWebAPI
- ASP.NET Web API 路由ASP.NETWebAPI路由
- ASP.NET Web API實踐系列01,以ASP.NET Web Form方式寄宿ASP.NETWebAPIORM
- ASP.NET Web API與Rest web api(一)ASP.NETWebAPIREST
- ASP.NET MVC – 模型簡介ASP.NETMVC模型
- ASP.NET Web Page Resources OverviewASP.NETWebView
- ASP.Net 管道模型 VS Asp.Net Core 管道 總結ASP.NET模型
- ASP.NET Core MVC 之模型(Model)ASP.NETMVC模型
- ASP.NET 頁面物件模型 (轉)ASP.NET物件模型
- Garden Planner for Mac(景觀設計軟體)Mac
- 題解:[ABC379D] Home Garden
- 【ASP.NET Web API教程】2 建立各種Web APIASP.NETWebAPI
- 使用 Web 標準生成 ASP.NET 2.0 Web 站點WebASP.NET
- ASP.NET Web Pages – 物件簡介ASP.NETWeb物件
- ASP.NET Web Forms – 事件簡介ASP.NETWebORM事件
- ASP.NET Core Web API 介面限流ASP.NETWebAPI
- ASP.NET Core Web API 與 SSLASP.NETWebAPI
- 從 Asp.Net MVC 到 Web FormASP.NETMVCWebORM
- Nginx執行Mono Web (ASP.NET)NginxMonoWebASP.NET
- ASP.NET Web Forms的改進ASP.NETWebORM
- ASP.NET Web API 中文版ASP.NETWebAPI
- JSON Web Token in ASP.NET Web API 2 using OwinJSONWebASP.NETAPI
- ASP.NET Core Web Api之JWT(一)ASP.NETWebAPIJWT
- ASP.NET Web Forms – SortedList 物件簡介ASP.NETWebORM物件
- ASP.NET Web Forms – Hashtable 物件簡介ASP.NETWebORM物件
- 讓ASP.NET Web API的Action方法ASP.NETWebAPI
- ASP.NET Core Web API 整合測試ASP.NETWebAPI
- ASP.NET Web Forms – ArrayList 物件簡介ASP.NETWebORM物件
- ASP.NET Web Forms – 導航簡介ASP.NETWebORM
- 聊聊asp.net中Web Api的使用ASP.NETWebAPI
- [ASP.NET MVC 小牛之路]18 - Web APIASP.NETMVCWebAPI
- 【java web】--以終為始,Asp.NetJavaWebASP.NET
- ASP.NET Web API 2 入門教程ASP.NETWebAPI
- 翻譯 - ASP.NET Core 基本知識 - Web 主機 (Web Host)ASP.NETWeb
- ASP.NET Web Forms – Web 伺服器控制元件簡介ASP.NETWebORM伺服器控制元件
- Garden Planner for Mac(園林綠化設計軟體)Mac
- ASP.NET Core Web API + Angular 仿B站(二)後臺模型建立以及資料庫的初始化ASP.NETWebAPIAngular模型資料庫