程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET中的HTTP模塊和處理程序

ASP.NET中的HTTP模塊和處理程序

編輯:關於ASP.NET

介紹

在Internet時代的開端,客戶端的需求非常有限;.htm文件就可以滿足他們的需求。但是,隨著時間的流逝,客戶端需求的擴充超越了.htm文件或靜態文件所包含的功能。

開發者需要擴充或擴展Web服務器的功能。Web服務器廠商設計了不同的解決方案,但是都遵循同一個主題“向Web服務器插入某些組件”。所有的Web服務器補充技術都允許開發者建立並插入組件以增強Web服務器的功能。微軟公司提出了ISAPI(Internet服務器API),網景公司提出了NSAPI(網景服務器API)等等。

ISAPI是一種重要的技術,它允許我們增強與ISAPI兼容的Web服務器(IIS就是一種與ISAPI兼容的Web服務器)的能力。我們使用下面的組件達到這個目的:

· ISAPI擴展

· ISAPI過濾器

ISAPI擴展是使用Win32動態鏈接庫來實現的。你可以把ISAPI擴展看作是一個普通的應用程序。ISAPI擴展的處理目標是http請求。這意味著你必須調用它們才能激活它們。 你可以認為ISAPI過濾器僅僅就是一個過濾器而已。客戶端每次向服務器發出請求的時候,請求要經過過濾器。客戶端不需要在請求中指定過濾器,只需要簡單地把請求發送給Web服務器,接著Web服務器把請求傳遞給相關的過濾器。接下來過濾器可能修改請求,執行某些登錄操作等等。

由於這些組件的復雜性,實現它們非常困難。開發者不得不使用C/C++來開發這些組件,但是對於很多人來說,使用C/C++進行開發簡直就是痛苦的代名詞。

那麼ASP.NET提供什麼東西來實現這些功能呢?ASP.NET提供的是HttpHandler(HTTP處理程序)和HttpModule(HTTP模塊)。

在深入了解這些組件的詳細信息之前,了解一下http請求經過HTTP模塊和HTTP處理程序的時候的處理流程是有價值的。

建立示例應用程序

我建立了下面一些的C#項目以演示應用程序的不同組件:

· NewHandler (HTTP處理程序)

· Webapp (演示HTTP處理程序)

· SecurityModules (HTTP模塊)

· Webapp2 (演示HTTP模塊)

這些應用程序的安裝步驟:

· 解開attached zip文件中的所以代碼。

· 建立兩個虛擬目錄webapp和webapp2;把這兩個目錄指向Webapp和Webapp2應用程序的實際物理目錄。

· 把NewHandler項目中的Newhandler.dll文件復制到webapp應用程序的bin目錄。

· 把SecurityModules項目中的SecurityModules.dll文件復制到webapp2應用程序的bin目錄中。

ASP.NET請求的處理過程

ASP.NET請求處理過程是基於管道模型的,在模型中ASP.NET把http請求傳遞給管道中的所有模塊。每個模塊都接收http請求並有完全控制權限。模塊可以用任何自認為適合的方式來處理請求。一旦請求經過了所有HTTP模塊,就最終被HTTP處理程序處理。HTTP處理程序對請求進行一些處理,並且結果將再次經過管道中的HTTP模塊:

請注意在http請求的處理過程中,只能調用一個HTTP處理程序,然而可以調用多個HTTP模塊。

Http處理程序

HTTP處理程序是實現了System.Web.IHttpHandler接口的.NET組件。任何實現了IHttpHandler接口的類都可以用於處理輸入的HTTP請求。HTTP處理程序與ISAPI擴展有些類似。HTTP處理程序和ISAPI擴展的差別在於在URL中可以使用HTTP處理程序的文件名稱直接調用它們,與ISAPI擴展類似。

HTTP處理程序實現了下列方法:

方法名稱 描述 ProcessRequest 這個方法實際上是http處理程序的核心。我們調用這個方法來處理http請求。 IsReusable 我們調用這個屬性來決定http處理程序的實例是否可以用於處理相同其它類型的請求。HTTP處理程序可以返回true或false來表明它們是否可以重復使用。

你可以使用web.config或者machine.config文件把這些類映射到http請求上。映射完成以後,當接收到相應請求的時候ASP.NET會實例化http處理程序。我們將解釋如何在web.config和/或machine.config文件中定義所有這些細節信息。

ASP.NET還通過IHttpHandlerFactory接口支持http處理程序的擴展。ASP.NET提供了把http請求路由到實現IHttpHandlerFactory接口的類的對象上的能力。此外,ASP.NET還利用了Factory設計模式。這種模式為建立一組相關對象而不提供具體類的功能提供了接口。簡單的說,你可以把用於建立依賴傳遞進來的參數建立的http處理程序對象的類看作是factory(工廠)。我們不用指定需要實例化的特定的http處理程序;http處理程序工廠處理這種事務。這樣做的優點在於如果未來實現IHttpHandler接口的對象的實現方法發生了改變,只要接口仍然相同,客戶端就不會受到影響。

下面是IHttpHandlerFactory接口中的方法列表:

方法名稱 描述 GetHandler 這個方法負責建立適當的處理程序並把它的指針返回到調用代碼(ASP.NET運行時)。這個方法返回的處理程序對象應該實現了IHttpHandler接口。 ReleaseHandler 這個方法負責在請求處理完成後釋放http處理程序。Factory 實現決定了它的操作。Factory 實現可以是實際摧毀實例,也可以把它放入緩沖池供以後使用。

在配置文件中注冊HTTP處理程序和HTTP處理程序工廠

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved