IIS7.0的集成模式和經典模式
IIS7.0中的Web應用程序有兩種配置模式:經典模式和集成模式。經典模式是為了與之前的版本兼容,使用ISAPI擴展來調用ASP.NET運行庫,原先運行于IIS6.0下的Web應用程序遷移到IIS7.0中只要將應用程序配置成經典模式,代碼基本不用修改就可以正常運行。集成模式是一種統一的請求處理管道,它將ASP.NET請求管道與IIS核心管道組合在一起,這種模式能夠提供更好的性能,能夠實現配置和管理的模塊化,而且增加了使用托管代碼模塊擴展IIS時的靈活性。如果老的Web應用程序運行于IIS7.0的集成模式下,可能需要對應用程序的web.config文件進行修改,尤其是使用了實現IHttpHandler接口的自定義模塊的情況。IIS7.0在同一個服務器上能夠同時支持兩種模式的應用程序。
IIS6.0中ASP.NETMMC管理單元用于配置ASP.NET,7.0中ASP.NET應用程序的管理域IIS管理更加緊密的集成在一起,不存在單獨的管理單元,所有的IIS和ASP.NET配置都是使用IIS管理器完成的。IIS7.0配置信息基于.NETFramework配置系統,所以IIS7.0中運行的應用程序的web.config文件同時包含web服務器和ASP.NET配置設置,例如可以再web.config文件中設置擴展名和文件的映射(IIS6.0中必須在IIS中進行配置)。
web.config文件的變化
system.webServer節指定了應用于web應用程序的IIS7.0設置,其父節點是configuration,該節點中可以設置的內容包括:
當請求未包含指定資源時,Web服務器返回給客戶端的默認文檔(defaultDocument);
響應的壓縮設置(httpCompression)
自定義頭部(httpProtocol節的customHeaders)
模塊(modules)
處理程序(handlers)
其中的一些設置僅適用于集成模式,而不適用于經典模式,如經典模式下運行的應用程序則忽略web.config的system.WebServer節中指定的所有托管代碼模塊和處理程序,這種模式下web應用程序應該在syste.web節的httpModules和httpHandlers中定義模塊和處理程序。
將Web應用程序遷移到集成模式
不包含自定義模塊或處理程序的Web應用程序通常無需更改即可在IIS7.0集成模式下正常工作。對于依賴于自定義模塊或處理程序的Web應用程序,需要執行以下步驟來使其能夠在集成模式下運行:
使用本主題稍后的將WebConfig文件遷移到集成模式部分中描述的方法之一,在Web.config文件的system.webServer節中注冊自定義模塊和處理程序。
僅在自定義模塊的Init方法中定義HttpApplication請求管道事件(如BeginRequest和EndRequest)的事件處理程序。
請確保您已解決UpgradingASP.NETApplicationstoIIS7.0:DifferencesbetweenIIS7.0IntegratedModeandClassicmode(將ASP.NET應用程序升級到IIS7.0:IIS7.0集成模式和經典模式之間的區別)的“KnownDifferencesBetweenIntegratedModeandClassicMode”(集成模式和經典模式之間的已知區別)部分中討論的問題。
實現IHttpModule接口的模塊被稱為托管代碼模塊,因為它們是使用.NETFramework生成的。可以在服務器級別或應用程序級別注冊托管代碼模塊。本機代碼模塊是僅在服務器級別注冊的DLL(非托管代碼)。在集成模式下,將以托管模塊的形式實現核心ASP.NET功能,例如會話狀態和Forms身份驗證。
在將應用程序從經典模式遷移到集成模式時,可以保留經典模式下的自定義模塊和處理程序注冊,也可以將這些注冊移除。如果不移除經典模式下使用的httpModules和httpHandlers注冊,則必須將validation元素的validateIntegratedModeConfiguration屬性設置為false以避免錯誤。validation元素是system.webServer元素的子元素。有關更多信息,請參見ASP.NETIntegrationwithIIS7.0(將ASP.NET與IIS7.0集成)中的“Disablingthemigrationmessage”(禁用遷移消息)部分。
遷移Web.config文件以便在集成模式下使用
如果模塊或處理程序是在應用程序級別定義的,則不會自動調用該模塊或處理程序。這涉及符合以下條件的模塊或處理程序:在Bin文件夾下的程序集中定義;在App_Code文件夾下作為源代碼定義;沒有在Web.config文件的system.webServer節中注冊和定義。為了使模塊或處理程序能夠參與集成模式請求管道,必須使用下列方法之一注冊該模塊或處理程序:
直接編輯Web.config文件,并且將modules或handlers元素添加到system.webServer元素中。請注意,與經典模式相比,元素名稱是不同的:modules和handlers分別對應于經典模式下的httpModules和httpHandlers。
使用IIS管理器配置模塊或處理程序。有關更多信息,請參見ConfiguringHandlerMappingsinIIS7.0(在IIS7.0中配置處理程序映射)和ConfiguringModulesinIIS7.0(在IIS7.0中配置模塊)。
使用IIS7.0命令行工具(Appcmd.exe)。有關更多信息,請參見ConfigureSettingsforaSite,Application,VirtualDirectoryorURLbyUsingAppcmd.exe(使用Appcmd.exe配置站點、應用程序、虛擬目錄或URL的設置)。
使用集成模式的類和屬性
在IIS7.0集成模式以及.NETFramework3.0版或更高版本中使用應用程序時,可以使用下面這些在經典模式下不可用的類和成員:
HttpResponse對象的SubStatusCode屬性,使用它可以設置在配置了失敗請求跟蹤的情況下有用的代碼。有關更多信息,請參見TroubleshootingFailedRequestsUsingFailedRequestTracinginIIS7.0(使用IIS7.0中的跟蹤功能解決請求失敗的問題)。
HttpResponse對象的Headers屬性,使用它可以訪問響應頭。
HttpContext對象的IsPostNotification和CurrentNotification屬性,在提供HttpApplication事件的處理程序時可以使用它們。
HttpRequest對象的Headers和ServerVariables屬性,它們支持寫功能。
集成模式與經典模式下請求處理管道的不同
集成模式下ASP.NET的處理管道與經典模式是不同的。集成模式下不論是傳統的ASP.NETWebForms應用程序還是ASP.NETMVC應用程序都可以使用Routing系統(路由系統)。
Routing系統原來是為ASP.NETMVC設計的,后來也被應用于其他ASP.NET技術,包括ASP.NETWebForms。這就是.NETFramework3.5中Routing代碼不在System.Web.Mvc.dll而在System.Web.Routing.dll中的原因。在.NETFramework4.0中,Routing代碼是在System.Web.dll中的。
IIS7.0集成PHP環境
想必不少從事網站方面工作的朋友都想在在WIN7上安裝PHP
和MYSQL吧,但是在百度和google上搜索都沒有PHPFORIIS7[1],想要一鍵自動在WIN7上安裝PHP和MYSQL看似有點癡人說夢了。最近找到了一個國內的網站上有phpStudy,下載下來測試之后發現確實可以一鍵自動在WIN7上安裝PHP和MYSQL。
自己配置PHP環境比較麻煩,而且容易出錯,對于怕麻煩的朋友來說選擇phpStudy一鍵自動在WIN7上安裝PHP和MYSQL是一個不錯的選擇。