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.NET MMC管理單元用於配置ASP.NET,7.0中ASP.NET應用程序的管理域IIS管理愈加嚴密的集成在一同,不存在單獨的管理單元,一切的IIS和ASP.NET配置都是運用IIS管理器完成的。IIS7.0配置信息基於.NET framework配置系統,所以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 應用程序通常無需更改即可在 IIS 7.0 集成形式下正常工作。關於依托於自定義模塊或處置程序的 Web 應用程序,需求執行以下步驟來使其可以在集成形式下運轉:
運用本主題稍后的將 Web Config 文件遷移到集成形式局部中描繪的辦法之一,在 Web.config 文件的 system.webServer 節中注冊自定義模塊和處置程序。
僅在自定義模塊的 Init 辦法中定義 HttpApplication 懇求管道事情(如 BeginRequest 和 EndRequest)的事情處置程序。
請確保您已處理 Upgrading ASP.NET Applications to IIS 7.0: Differences between IIS 7.0 Integrated Mode and Classic mode(將 ASP.NET 應用程序晉級到 IIS 7.0:IIS 7.0 集成形式和經典形式之間的區別)的“Known Differences Between Integrated Mode and Classic Mode”(集成形式和經典形式之間的已知區別)局部中討論的問題。
完成 IHttpModule 接口的模塊被稱為托管代碼模塊,由於它們是運用 .NET framework 生成的。能夠在效勞器級別或應用程序級別注冊托管代碼模塊。本機代碼模塊是僅在效勞器級別注冊的 DLL(非托管代碼)。在集成形式下,將以托管模塊的方式完成中心 ASP.NET 功用,例如會話狀態和 Forms 身份考證。
在將應用程序從經典形式遷移到集成形式時,能夠保存經典形式下的自定義模塊和處置程序注冊,也能夠將這些注冊移除。假如不移除經典形式下運用的 httpModules 和 httpHandlers 注冊,則必需將 validation 元素的 validateIntegratedModeConfiguration 屬性設置為 false 以防止錯誤。validation 元素是 system.webServer 元素的子元素。有關更多信息,請參見 ASP.NET Integration with IIS 7.0(將 ASP.NET 與 IIS 7.0 集成)中的“Disabling the migration message”(禁用遷移音訊)局部。
遷移 Web.config 文件以便在集成形式下運用
假如模塊或處置程序是在應用程序級別定義的,則不會自動調用該模塊或處置程序。這觸及契合以下條件的模塊或處置程序:在 Bin 文件夾下的程序集中定義;在 App_Code 文件夾下作為源代碼定義;沒有在 Web.config 文件的 system.webServer 節中注冊和定義。為了使模塊或處置程序可以參與集成形式懇求管道,必需運用下列辦法之一注冊該模塊或處置程序:
直接編輯 Web.config 文件,並且將 modules 或 handlers 元素添加到 system.webServer 元素中。請注重,與經典形式相比,元素稱號是不同的:modules 和 handlers 分別對應於經典形式下的 httpModules 和 httpHandlers。
運用 IIS 管理器配置模塊或處置程序。有關更多信息,請參見 Configuring Handler Mappings in IIS 7.0(在 IIS 7.0 中配置處置程序映射)和 Configuring Modules in IIS 7.0(在 IIS 7.0 中配置模塊)。
運用 IIS 7.0 命令行工具 (Appcmd.exe)。有關更多信息,請參見 Configure Settings for a Site Application Virtual Directory or URL by Using Appcmd.exe(運用 Appcmd.exe 配置站點、應用程序、虛擬目錄或 URL 的設置)。
用來運用集成形式的類和屬性
在 IIS 7.0 集成形式以及 .NET framework 3.0 版或更高版本中運用應用程序時,能夠運用下面這些在經典形式下不可用的類和成員:
HttpResponse 對象的 SubStatusCode 屬性,運用它能夠設置在配置了失敗懇求跟蹤的狀況下有用的代碼。有關更多信息,請參見 Troubleshooting Failed Requests Using Failed Request Tracing in IIS 7.0(運用 IIS 7.0 中的跟蹤功用處理懇求失敗的問題)。
HttpResponse 對象的 Headers 屬性,運用它能夠訪問響應頭。
HttpContext 對象的 IsPostNotification 和 CurrentNotification 屬性,在提供 HttpApplication 事情的處置程序時能夠運用它們。
HttpRequest 對象的 Headers 和 ServerVariables 屬性,它們支持寫功用。