IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容
?
IIS 7.0 的發布時間正好是 Windows NT? 4.0 中第一個 IIS 版本發布十周年的紀念日。2001 年,在四個版本之后,IIS 5.0 成為了 Internet 上最流行的 Web 服務器,盡管幾個月后它成了臭名昭著的 Code Red 和 Nimbda 蠕蟲的攻擊對象。IIS 6.0 是在 Windows Server? 2003 中發布的,它對服務器進行了重大改寫,將重點完全放在改進安全性、可靠性和性能上面。此后,IIS 6.0 已被證明是堅如磐石的 Web 服務器,自從發布后,它獲得了高可靠性和高安全性記錄,而且只有一條關鍵安全公告(不是可遠程利用的)。
在本文中,我要利用這個機會向開發人員和管理員介紹下一代 IIS 7.0 Web 服務器之所以有如此大的差異的主要原因,并使您在使用它的很多新功能時有個良好的開始。
IIS 7.0 的遠景是要繼承 IIS 6.0 基本代碼的速度、可靠性和安全性,并將它演進成高度可擴展和可管理的 Web 服務器平臺,具備足以運行未來 Web 應用程序的強大功能。最終成為最具前景的 Microsoft Web 服務器,并帶來在 IIS 歷史上最大程度的體系結構改進。
IIS 7.0 的核心是一個完全模塊化的 Web 服務器,它由 40 多項功能組成,這些功能可以組合成一個針對在應用程序拓撲中的所需角色經過優化的小型 Web 服務器。這些功能基于一個新的可擴展層,這個層允許開發人員以本機代碼或者用 Microsoft? .NET Framework 來擴展或替換服務器的幾乎任何方面。IIS 7.0 在整個運行庫、管理和操作功能方面都提供了可擴展性,以幫助您為特定需要構建端到端解決方案。在核心平臺的基礎上,IIS 7.0 解決了與服務器的可管理性和操作相關的很多問題。它采用全新的配置系統,能夠對站點進行完全委派的管理,并最終使 Web 應用程序的 xcopy 部署成為現實。新的管理 API 和診斷功能使服務器的部署、管理和故障排除明顯變得比以前更容易、更方便。
但在下一個 Windows Server 版本(代號為“Longhorn”)即將最后發布之前,為什么應當開始考慮 IIS 這個服務器應用程序呢?現在開始考慮采用它之所以重要,是因為 Windows Vista 將附帶相同的全功能 IIS 7.0 程序,這些程序預計將在 Windows Server“Longhorn”中發布。這意味著您可以立即利用新的 IIS 7.0 功能構建您的個人網站,并將它承載在 Windows Vista 上。此外,當 Windows Server“Longhorn”發布時您將把生產 Web 應用程序以及 Web 服務器基礎結構部署到相同的 IIS 平臺上,就這一點來說,您可以率先開始開發和測試它們。
有興趣嗎?讓我們深入討論細節。
模塊化 Web 服務器
IIS 7.0 將 Web 服務器分成一個輕型服務器核心,以及可以插入此核心中的 40 多個功能模塊。這些模塊(比如允許下載靜態 Web 內容的 StaticFileModule,或者支持集成的 NTLM 身份驗證的 WindowsAuthModule)可以單獨安裝在服務器上,以提供您需要的具體功能。
可以在任何時候從服務器上完全卸載這些模塊(請參閱圖?1),或為不需要它們的特定應用程序而專門禁用它們。這將幫助服務器管理員快速地部署小型服務器,同時大大減少受攻擊可能性,并通過只執行所需代碼極大地提高性能。
圖 1?只使用需要的功能 (單擊該圖像獲得較小視圖)
圖 1?只使用需要的功能 (單擊該圖像獲得較大視圖)
組件化體系結構是 IIS 7.0 的關鍵屬性,它可以降低安全風險,并最大程度減少安裝修補程序的必要。它還支持特殊化的服務器部署,這樣的部署可以將選擇 IIS 功能和自定義組件組合起來,針對應用程序拓撲中的特定服務器角色對它們進行優化,例如,反向代理和緩存服務器、HTTP 協議負載平衡器、或 SSL 和安全 sentinel 服務器。
IIS 7.0 所附帶的所有服務器功能都基于新的公用可擴展 API。作為開發人員,您可以用您自己的功能替換任何現有服務器功能,也可以構建新的模塊以添加到 IIS 7.0 功能集中。您是否希望用自定義的身份驗證模塊替換內置身份驗證機制,或者提供新形式的響應壓縮?請繼續。
新的可擴展 API 是對以前的 ISAPI 可擴展模型的根本改進,使您能夠更靈活、更輕松增強服務器。幾乎服務器的每個方面(從核心服務器直到配置、管理和診斷)都提供了可擴展性,使您可以根據自己的需要擴展和裁減服務器。本文稍后將提供有關可擴展性的更多介紹。
經過簡化的部署和配置
以前的 IIS 版本所采用的集中化配置存儲(人們親切稱其為元數據庫)已經一去不復返了。IIS 7.0 具有新的委派配置系統,它基于分布式 XML 配置文件的層次結構。此層次結構由全局 applicationHost.config 文件(該文件包含服務器級別的配置默認設置)以及應用程序的目錄結構中的分布式 web.config 文件組成。這些文件與 ASP.NET 應用程序框架用于以可移植方式存儲應用程序設置的 web.config 文件是相同的文件。因而可以使用干凈和強大結構化的 XML 指令,并排地存儲 IIS 和 ASP.NET 配置。下面是示例:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.web> <customErrors mode="Off" /> </system.web> <system.webServer> <directoryBrowse enabled="true" /> </system.webServer> </configuration>?
過去,必須在機器級的元數據庫存儲庫中顯式配置 IIS 應用程序設置,然后應用程序才能正常工作。而使用分布式 web.config 文件,應用程序則將必需的服務器配置封裝在其目錄結構中。這就大大簡化了部署,從而可以將獨立的應用程序直接復制到目標服務器的應用程序目錄中,從而以所需設置立即啟動和運行。
新的配置系統還為服務器管理員提供了全面控制權,允許他們將某些配置選項委派給應用程序,同時由于安全或業務原因保持對其他選項的控制。這樣,托管服務器上的應用程序可以在其應用程序中直接設置必需的配置,而不需要求助于服務器管理員或使用外部配置面板。
在 IIS 7.0 中,配置系統是完全可擴展的。新模塊可以添加它們自己的配置架構,從而使應用程序能夠與 IIS 和 ASP.NET 配置一起并排配置其功能:
<configuration> <system.webServer> <directoryBrowse enabled="true" /> </system.webServer> <myBandwidthThrottler enabled="true" /> </configuration>?
自定義配置部分使用了與 IIS 7.0 功能的配置相同的配置架構,從而利用了強大的類型屬性值、集合語法和分層重寫及鎖定語義。
IIS 7.0 繼續支持現有安裝代碼使用管理基礎對象 (ABO) API 向原有元數據庫寫入數據,或使用那些使用更高級別的 Active Directory? 服務接口 (ADSI) 和 Windows Management Instrumentation (WMI) 對象的腳本來配置 IIS。它通過提供模擬 ABO API 的兼容層來實現這樣的支持(所有其他原有配置 API 均基于該兼容層),從而允許上述腳本就像在以前版本的 IIS 中一樣讀取和更改配置。(有關元數據庫兼容性的詳細信息,請參閱本文后面的“經過改進的性能”和“向后兼容”兩節。)雖然新的結構化 XML 配置格式使您更容易在您喜歡的文本編輯器中處理配置,但 IIS 還是為管理員提供了很多管理工具和 API,以簡化服務器管理,并支持自動配置和部署。
經過改進的管理
IIS 7.0 提供了一組豐富的管理功能,使得用戶可以在廣泛的方案中管理服務器。新的圖形化 IIS 管理器管理工具取代了 InetMgr.exe MMC 管理單元,借助其基于任務的管理界面,使手動服務器管理變得非常簡單(參見圖?2)。
圖 2?IIS 管理器提供了圖形化管理工具 (單擊該圖像獲得較小視圖)
圖 2?IIS 管理器提供了圖形化管理工具 (單擊該圖像獲得較大視圖)
IIS 管理器允許您管理大多數 IIS 7.0 功能,并監視服務器的操作。該工具支持通過防火墻友好的 HTTP/SSL 連接進行遠程管理,并且可以選擇同時支持用于身份驗證的基于 Windows 的憑據和其他憑據。
此外,該工具支持委派管理,從而讓應用程序所有者能夠遠程管理其應用程序,而不必對服務器計算機具有管理訪問權。借助此功能,托管服務的用戶可以在其家用桌面機上運行管理工具,并遠程連接以管理其在托管服務器上的應用程序。當然,服務器管理員對可以將哪些管理功能委派給應用程序所有者擁有完全控制權。
最后,該管理工具是完全可擴展的,它基于配置系統可擴展性,允許將自定義管理 UI 添加到工具中。在 iis.net/default.aspx?tabid=7&subtabid=73 中可以詳細了解 IIS 管理器工具以及如何添加自己的管理插件。
為了獲得更靈活的命令行管理,IIS 7.0 提供了 appcmd.exe 命令行工具(參見圖?3)。此工具提供了一組全面的管理功能和比 UI 更好的批量操作支持。通過這個功能強大的實用程序,可以輕松從命令提示符讀取和寫入配置、訪問站點和應用程序池狀態信息以及執行幾乎任何其他管理任務。
圖 3?IIS 7.0 的 Appcmd.exe 命令行管理 (單擊該圖像獲得較小視圖)
圖 3?IIS 7.0 的 Appcmd.exe 命令行管理 (單擊該圖像獲得較大視圖)
利用 appcmd.exe,可以創建和配置站點、應用程序、應用程序池和虛擬目錄。通過它,可以啟動和停止站點、回收應用程序池、列出正在運行的工作進程、檢查當前正在執行的請求以及搜索失敗事件請求緩沖 (FREB) 跟蹤日志。還可以搜索、編輯、導出和導入 IIS 及 ASP.NET 配置數據。
該工具旨在使您可以靈活搜索受支持的服務器對象,例如,使您能夠快速找到有特定設置集的站點,或已停止的應用程序池。執行搜索時,可以對任何對象的屬性使用任意數量的條件,包括使用數字范圍和簡單通配符字符串匹配。
Appcmd 還支持類似 Windows PowerShell?中出現的鏈接操作,從而允許從單個命令行一起執行針對一組相關對象的多個操作。例如,您可以用一條命令查找和回收承載某個站點的應用程序的所有應用程序池。若要了解如何用 AppCmd 管理 IIS,請參閱 iis.net/default.aspx?tabid=2&subtabid=25&i=954&p=1。
.NET Framework 和腳本
除了用 IIS 管理器或 appcmd.exe 命令行工具進行手動服務器管理以外,IIS 7.0 還為編程管理提供了豐富的選項。首先,可以利用 Microsoft.Web.Administration API 通過 .NET 應用程序管理服務器。也可以使用新的 COM API 直接管理 IIS 配置系統,或從諸如 ASP 或 Windows? Script Host (WSH) 這樣的腳本環境訪問它。還有新的 WMI 提供程序,以及通過元數據庫兼容層實現的對原有 WMI 和 ADSI 提供程序的支持。
Microsoft.Web.Administration 是新的 .NET 管理 API,它使托管代碼應用程序可以輕松地以編程方式設置 IIS 站點和應用程序、訪問重要狀態和診斷信息以及按其他方式配置服務器。通過讓基于 .NET Framework 的應用程序輕松訪問 IIS 配置及狀態信息,為編寫基于 .NET 的安裝和管理應用程序,甚至是直接從 ASP.NET 頁執行管理任務,提供了可能。
作為示例,圖?4 顯示了一個小型 C# 程序,該程序使用 Microsoft.Web.Administration 從命令行新建網站。
Microsoft.Web.Administration 使 IIS 操作和配置任務能夠直接在您選擇的支持 .NET 語言的應用程序內部輕松完成。它還使您可以輕松訪問有關服務器的運行庫狀態信息,例如,正在運行的工作進程或當前正在執行的請求。
Microsoft.Web.Administration API 是訪問自定義 .NET 服務器模塊內部的自定義配置和 IIS 管理器工具的 UI 插件的基礎。有關端到端服務器包的示例,包括用于增強 Web 服務器和相關配置及管理組件的圖像版權處理程序,請參閱 iis.net/default.aspx?tabid=2&subtabid=25&i=1076。
在 Windows Server“Longhorn”時間范圍內,IIS 團隊將為添加自定義管理對象或擴展現有管理對象而創建統一的可擴展模型,這些模型將使自定義管理功能通過不同管理功能(包括腳本和 Microsoft.Web.Administration API)自動公開。當您無法添加或擴展 Windows Vista 中的管理對象時,可以使用 Microsoft.Web.Administration 和其他 API,就像現有 IIS 配置部分一樣,訪問和管理自定義配置部分。
構建 Web 服務器功能
IIS 7.0 使您能夠根據您的需要塑造服務器,允許您添加或替換服務器中的任何功能,以便提供您需要的功能。此功能的核心是全新的 Web 服務器可擴展 API,所有現有 IIS 7.0 HTTP 功能都建立在它之上。此 API 是公用的,這意味著您可以實現 IIS 7.0 附帶的任何功能。這對 IIS 是第一次,并且是對以前的有限 ISAPI 可擴展模型的根本改進。
新的可擴展 API 是一組直觀的 C++ 類,這些類定義了 Web 服務器對象模型,并使一個模塊能夠在 IIS 上提供請求處理服務。這些類被定義在 Windows Vista SDK 中的 \inc\httpserv.h 頭文件中。
與 ISAPI 比較,這些 API 功能更強大,而且易用性得到了極大增強。這是如何實現的?首先,新的 API 具有類型安全、良好封裝的對象模型。用新的服務器對象模型可以更輕松地進行開發,該模型為所有基本服務器對象和任務提供了專門的接口。包括:
- 用 IHttpRequest 類檢查請求
- 用 IHttpResponse 類管理響應
- 從 IHttpServer 類使用有用的實用程序功能
- 用 IHttpUser 類提供身份驗證
- 用配置 API 訪問您的模塊的自定義配置部分
?
這些類公開了比以前更多的服務器功能(超過了構建 IIS 附帶的所有特性所需的功能),但仍然比松散的類型化 ISAPI 接口更容易使用。
開發人員還將受益于經過改進的內存和狀態管理模式。大多數 IIS 7.0 服務器 API 都使用服務器托管內存來存儲它們返回的數據,而不是像 ISAPI 和大多數現有 Win32? API 那樣需要您分配和管理緩沖區。過去,這一直是 ISAPI 開發中最容易產生錯誤也是最令人厭煩的方面。新的 API 還簡化了很多復雜的請求處理任務,例如,響應緩沖、身份驗證和為客戶端準備響應數據。幾個月以前,我開始發表我的一系列博客文章,以解釋新編程模型中的重大改進和模式。如果您正在考慮針對 IIS 的 C++ 開發,可通過訪問以下網址參考相關內容:mvolo.com/blogs/serverside/archive/2006/10/07/10-reasons-why-server-development-is-better-with-IIS7.aspx。
IIS 7.0 還為擴展服務器提供了完全集成的 .NET Framework API。此外,這與自從 Windows 2000 上的 ASP.NET 1.0 發布以來 ASP.NET 提供的用于構建 ASP.NET 模塊和處理程序的 API 是相同的。但兩者有區別,人們熟悉的 ASP.NET 模型允許現有 ASP.NET 模塊和處理程序繼續工作在 IIS 7.0 服務器上,但實際上它已完全不同于以前的舊技術。
在 IIS 7.0 中,ASP.NET 有兩個版本:經典模式和集成模式。經典模式的工作方式與它在以前版本的 IIS 中完全相同。集成模式是新的平臺默認設置,它使用全新的引擎來提供與 IIS Web 服務器前所未有的集成。在集成模式下,可以用 ASP.NET API 開發 IIS 7.0 模塊,這樣的模塊可以直接與 Web 服務器集成,并且能夠提供用基本 C++ API 即可實現的幾乎所有服務。
這基本上是兩個方面的最佳結合:像成員身份和角色管理這樣的 .NET Framework 和 ASP.NET 2.0 應用程序服務所具有的熟悉的接口和方便性,以及以前只對基于 C 的 ISAPI 組件可用的擴展服務器的原始能力。
除了能夠編寫新的 ASP.NET 模塊(建立在集成模式的特定優勢之上)之外,只需通過在 web.config 文件中更改少量配置選項,就可以使很多原有 ASP.NET 模塊變得更為強大。
ASP.NET 集成
使用 IIS 7.0,ASP.NET 2.0 不止是建立動態應用程序的優秀框架。它還成為擴展 IIS Web 服務器的平臺,這使得 ASP.NET 組件成為 IIS 請求處理管道的完整成員。下面介紹它的工作原理。
在直到 6.0 版的 IIS 版本中,ASP.NET 均作為獨立的應用程序框架連接到 Web 服務器。它負責處理向它注冊的請求擴展(通常是 .aspx 和少量其他擴展名),并且它還為這些請求提供強大的功能,如窗體身份驗證、響應輸出緩存以及其他功能,包括由自定義 ASP.NET 模塊提供的服務。因此,只有向 ASP.NET 注冊的內容類型才能受益于這些服務。包括 ASP 頁、PHP 頁、圖像和 CGI 應用程序在內的其他類型則無法受益。此外,由于運行庫限制,即使對于 ASP.NET 資源,也無法在 ASP.NET 中實現某些 Web 服務器功能。例如,它不能檢查傳出 HTTP 響應標頭集并在發送到客戶端之前修改它們。
當 ASP.NET 模塊在 IIS 7.0 中以集成模式運行時,將與本機 C++ IIS 模塊并排運行在統一請求處理管道中(參見圖?5)。這意味著現有 ASP.NET 服務(如輸出緩存、URL 重寫和由自定義 ASP.NET 模塊提供的任何其他服務)現在可以應用于任何內容類型。更好的運行庫集成還使 ASP.NET 模塊能夠訪問以前不可用的服務器功能,這樣,在大多數情況下,不再需要編寫本機 IIS 可擴展功能。
圖 5?在 IIS 6.0 和 IIS 7.0 中與 ASP.NET 集成 (單擊該圖像獲得較小視圖)
圖 5?在 IIS 6.0 和 IIS 7.0 中與 ASP.NET 集成 (單擊該圖像獲得較大視圖)
最后,在集成模式中,ASP.NET 提供了少量新 API,用于公開由于與 IIS 緊密集成而可用的其他功能。其中包括檢查所有響應標頭(不管是誰生成了響應)的能力,以及將請求執行操作完全重寫到另一個 URL 的能力。
通常,現有應用程序可以利用集成模式,而不需要使用特定于集成模式的功能的新 ASP.NET 模塊。只需通過更改配置,應用程序就可以執行諸如以下操作:使用 ASP.NET 窗體身份驗證和 URL 授權通過用戶安全機制保護整個網站,或使用 ASP.NET URL 映射在應用程序中重寫 URL 等。如需查看利用集成模式阻止 Web Leech 熱鏈接到站點圖像的示例,請參閱實現這一點的示例 ASP.NET 模塊:mvolo.com/2006/11/10/stopping-hotlinking-with-iis-and-aspnet.aspx。該示例很好地說明了如何通過在集成模式中使用現有第三方 ASP.NET 模塊來更好地利用它們。
如需查看利用現有應用程序的集成模式的詳細步驟,請參閱我的文章:iis.net/default.aspx?tabid=2&subtabid=25&i=1081&p=1。
經過改進的安全性
IIS 7.0 建立在 IIS 6.0 基本代碼之上,由于謹慎的編碼實踐和默認安全的設計原則,這些代碼擁有已被證明的安全跟蹤記錄。在此之上,IIS 7.0 引入了幾處體系結構更改,以提供更強大的安全性,還引入了大量功能,以幫助您建立安全的 Web 應用程序。
減少受攻擊的可能性是設計和部署安全系統的基本原則之一。通過將 IIS 6.0 的默認鎖定方法發展到下一級別,在默認情況下 IIS 7.0 安裝的功能更少,從而可以鎖定服務器的更多項。通過進一步利用服務器的模塊化性質來刪除所有沒用的功能,可以將服務器的受攻擊可能性降到最低,從而極大地降低服務器被攻擊的風險。
如果在服務器上的任何不用組件中發現了漏洞,不需要為了防止遭到攻擊或修補漏洞組件,立即讓服務器停止工作。這樣可以提高應用程序的可用性,并降低修補程序的管理成本。
除了核心安全性改進以外,IIS 7.0 還提供了大量安全功能,通過使用它們,可以進一步在服務器上鎖定和部署安全應用程序。IIS 一直在為通過身份驗證保護應用程序內容提供強大支持。現在,利用 ASP.NET 集成模式,您可以使用流行的 ASP.NET 安全功能(例如,窗體身份驗證、成員身份和登錄控制)來為整個應用程序提供完整的身份驗證和訪問控制解決方案。通常,可以在幾分鐘內完成此設置,而不必編寫任何代碼。
新的 URL 授權功能從 ASP.NET URL 授權功能發展而來,可以用于為整個應用程序配置聲明性訪問控制規則。利用這些訪問規則可以根據用戶名和角色允許或拒絕對應用程序中對 URL 的訪問。URL 授權與 ASP.NET 2.0 成員身份和角色管理功能無縫集成在一起,可以有效地與 ASP.NET 窗體身份驗證和登錄控制一起使用,以快速啟用應用程序的用戶安全機制。
新的請求篩選功能提供了功能強大的鎖定功能,該功能的一部分可在流行的 URLScan 工具中獲得。通過拒絕包含可疑數據的請求、保護敏感資源或強制執行進攻性請求限制,可以用請求篩選功能進一步鎖定站點。
IIS 7.0 還進行了大量更改,旨在使安全設置的部署和管理更輕松。新的 IIS_IUSR 匿名帳戶是內置的,這意味著它不受密碼過期的影響,而且不需要在計算機之間進行密碼同步。新的 IIS_IUSRS 組取代了 IIS_WPG 組,在運行時自動注入工作進程的標識中,從而緩解了在使用自定義帳戶時向該組手動添加工作進程標識的需要。
由于有了內置的 IIS_USR 帳戶和 IIS_USRS 組,用于為匿名 IIS 帳戶和組指定訪問控制列表 (ACL) 的應用程序內容就可以從一個 IIS 服務器直接被復制到另一個 IIS 服務器,而不需要執行任何額外的步驟來保留安全設置。這就極大地簡化了跨開發-測試-生產周期的應用程序部署過程。
前面討論的分布式配置系統允許應用程序所有者直接在其應用程序內管理所需的 Web 服務器設置,而不必具備對服務器的管理員權限。應用程序管理員可以在將其應用程序上載到服務器時,可以在其應用程序內容內部在 web.config 文件中指定必需的配置,或使用 IIS 管理器工具遠程配置其應用程序。
IIS 管理器工具通過防火墻友好的 HTTPS 連接提供安全遠程管理功能。由于管理工具能夠通過成員身份服務來驗證應用程序管理員的身份(或者是 Windows 用戶,或者是自定義用戶帳戶),因此管理工具允許進行遠程應用程序管理,而不需要所有者對服務器有任何 Windows 權限。
作為服務器管理員,通過配置系統中的靈活的鎖定支持,您對應用程序可以配置哪些設置擁有完全控制權。同樣,對于遠程管理其應用程序的應用程序管理員可以使用哪些 IIS 管理器工具功能,您也可以進行控制。
經過改進的診斷
在 Windows、IIS 7.0 和 Web 應用程序所支持的所有新功能中,Web 服務器是通常需要投入大量精力進行故障排除的非常復雜的系統。IIS 7.0 引入了大量新功能,可幫助您監視服務器的運行情況并調試應用程序的問題。
首先,IIS 7.0 允許您深入查看服務器的實時狀態。此功能稱為運行庫狀態和控制 API,或 RSCA(讀作“reeska”),它可以公開站點和應用程序池的活動狀態、運行中的工作進程,甚至允許您查看當前正在服務器上執行的請求。它還使您能夠控制服務器的狀態,例如,啟動和停止站點,或回收應用程序池。在 Windows Vista 中,可以在 IIS 管理器中、通過 appcmd.exe 命令行工具或使用 Microsoft.Web.Administration API 以編程方式訪問此信息。
例如,可以查看當前正在執行的請求以及它們所處的服務器階段。這可以讓您快速解決掛起的請求問題,并跟蹤是哪些腳本正在耗費 CPU(參見圖?6)。
在調查服務器問題或調整服務器性能時,RSCA 功能非常易于使用,通過它既能快速看到系統中發生的情況,還能在執行故障排除時控制服務器。在辦公室調查 Bug 時,我通常選擇使用 appcmd.exe 來查看應用程序池的狀態、檢查工作進程、啟動或停止有危害的應用程序池,以便找到問題所在。
圖 6?在 IIS 管理器中跟蹤阻塞的腳本 (單擊該圖像獲得較小視圖)
圖 6?在 IIS 管理器中跟蹤阻塞的腳本 (單擊該圖像獲得較大視圖)
Web 應用程序中發生錯誤時,可能是由于不正確的服務器配置、應用程序錯誤或各種環境因素導致的。狀態代碼和標準錯誤消息所提供的錯誤線索很少,它們可能使服務器故障排除成為噩夢。IIS 7.0 提供了有關大多數錯誤的詳細的錯誤信息,使您可以準確知道錯誤的根源、原因以及如何修復(參見圖?7)。
圖 7?錯誤詳細信息指出問題和解決方案 (單擊該圖像獲得較小視圖)
圖 7?錯誤詳細信息指出問題和解決方案 (單擊該圖像獲得較大視圖)
詳細的錯誤遵從類似于 ASP.NET 詳細錯誤的安全方案。默認情況下,您只有在從本地計算機瀏覽網站時才能獲得詳細信息。像以前一樣,還可以為不同的錯誤代碼配置自定義錯誤頁,或重定向到自定義 URL。詳細的錯誤頁現在也已本地化,如果安裝了相應語言的語言包,就可以按客戶端的首選語言提供錯誤描述。
診斷錯誤而無需調試
如果您遇到的錯誤情況是未知的,或者是由多個 Web 服務器組件的復雜疊加而導致的,則會怎么樣?不用擔心,IIS 7.0 提供了全面的跟蹤機制,它可以為每個請求生成詳細的書面跟蹤記錄,以便能夠快速跟蹤問題。
Windows Server 2003 Service Pack 1 (SP1) 中向 IIS 6.0 中添加了 Windows 事件跟蹤 (ETW) 事件,在此事件的基礎上,IIS 7.0 添加了更多信息性事件。這些事件包含有關服務器處理的每個階段的有用信息,通過檢查這些信息可以反向跟蹤請求執行過程,查明出錯位置。可以將這些事件路由到 Windows 跟蹤基礎結構,后者允許多個 Windows 組件(包括 ASP.NET 和 SQL Server?)將其跟蹤信息鏈接到該請求的單個邏輯執行跟蹤。
還可以將它們路由到新的失敗請求跟蹤功能(又稱為 FREB),后者會將跟蹤日志保存到 XML 日志文件中,然后可以用提供的 XSLT 樣式表查看這些文件(參見圖?8),或以編程方式使用它們。
圖 8?查看 XML 日志文件 (單擊該圖像獲得較小視圖)
圖 8?查看 XML 日志文件 (單擊該圖像獲得較大視圖)
關于失敗請求跟蹤功能最酷的一點是您可以使它始終在服務器上保持啟用狀態。通過它可以自動捕獲那些遇到可配置的故障狀況的請求的跟蹤日志,同時避免因保存已成功完成的請求的跟蹤日志而導致性能降低。例如,對于導致服務器錯誤或完成時間超過特定時間的請求,可以將它打開。
使用失敗請求跟蹤,可以在錯誤發生時始終捕獲有價值的跟蹤信息,即使它們是間歇性的,或難以復現的。這可以幫助診斷和解決以前需要艱難調試的困難問題。
基本跟蹤基礎結構通過服務器可擴展模型向 IIS 模塊公開,從而允許所有服務器組件(無論它們是 IIS 附帶的,還是第三方開發的)在請求處理期間發出詳細跟蹤信息。通過 System.Diagnostics API 和 ASP.NET 頁跟蹤,IIS 7.0 跟蹤功能與 ASP.NET 跟蹤功能集成在一起,從而允許托管模塊利用統一跟蹤模型。若要更進一步,可以編寫自己的跟蹤模塊,為處理和輸出跟蹤信息提供新的方式。例如,您可以成為編寫模塊以便將 IIS 跟蹤信息保存到 SQL Server 或文本文件中的第一個人。
經過改進的性能
雖然 Windows Vista 是客戶端操作系統,并不針對高吞吐量的生產部署(Windows Vista 上的 IIS 受限于每次 10 個并發請求),但它的確體現了一些旨在大幅提高 Web 應用程序性能的重要體系結構改進。通過與我們正在 Windows Server“Longhorn”時間范圍內所進行的廣泛的性能改進工作相結合,這些改進將幫助 IIS 7.0 提高服務器性能。
當然,第一項改進是組件化。服務器的模塊化性質允許管理員刪除不需要的服務器功能,從而在請求處理期間節省內存和 CPU 使用量。這會導致計算機的吞吐量和容量得到重大改進。在只有站點的某些部分需要特定功能的情況下,以粒度方式啟用功能的能力(針對服務器上的每個應用程序打開和關閉相應功能)將進一步提高應用程序的性能。
在 IIS 7.0 中,另一個值得注意的性能特性是新的 IIS 輸出緩存。此特性為在服務器上重復利用對高成本動態頁面的響應提供了支持,從而緩解了對執行高成本的顯示處理和數據庫事務以便將響應返回客戶端的需要。IIS 輸出緩存是對 ASP.NET 中現有的豐富輸出緩存功能的速度更快的替代方案,它可以支持一組更小的緩存功能,但能以增強性能的方式為緩存動態內容提供足夠的靈活性。
通過將動態內容進行輸出緩存,無論它是 ASP.NET 頁、PHP 腳本還是 CGI 應用程序,您都可以獲得 5-10 倍的性能提升,同時大大降低對磁盤和數據庫的負載。
向后兼容
IIS 7.0 應當能夠運行大多數現有應用程序,而不需要修改。考慮到在此版本中支持創新所需要的體系結構的更改范圍,這是一項巨大成功。配置系統已經過最大更改,從集中的松散類型化配置存儲轉變為委派的 XML 配置文件層次結構。配置信息的結構和存儲都完全不同于 IIS 6.0 元數據庫,并且不支持通過原有配置 API 進行訪問。
IIS 7.0 通過提供元數據庫的仿真層來解決此問題,仿真層在配置系統的基本數據與元數據庫 ABO API 所公開的接口之間執行實時轉換。這就使得在通過 ABO 或更高級別的 WMI 或 ADSI 腳本訪問為該元數據庫編寫的代碼時,代碼能夠正確工作。但是,務必安裝兼容性安裝組件才能獲得此功能。
雖然 IIS 7.0 為開發 IIS 組件提供了新的可擴展模型,但它仍然支持 ISAPI 組件。如果安裝 ISAPI 擴展和 ISAPI 篩選器安裝組件,就能夠像以前那樣運行您的擴展和篩選器。但是,如果正在開發新組件,則應當確保使用新的可擴展模型,以獲得更強大和經過改進的開發體驗。
與集成模式存在運行庫不兼容情況的少數 ASP.NET 應用程序可能必須移動到運行于經典模式的應用程序池中。在這種情況下,通過將多個應用程序放在單獨的應用程序池中,可以在相同服務器上以兩種模式并排運行這些應用程序。如需 IIS 7.0 上的 ASP.NET 重大更改和常規 ASP.NET 兼容性信息的完整列表,請參閱 ASP.NET 兼容性白皮書:iis.net/default.aspx?tabid=2&subtabid=25&i=1223。
總結
在 Windows Vista 中發布的 IIS 7.0 旨在為下一代 Web 應用程序平臺提供最佳體系結構基礎,其重點是用于 Web 服務器的正確核心體系結構、可擴展性和管理平臺。Windows Vista 使您能夠在 Windows Vista 服務器版本發布時用于部署應用程序的相同服務器平臺上開發和測試這些應用程序。
由于 IIS 7.0 是在 Windows Vista 中發布的,因此 Web 平臺和工具團隊的工作重點轉移到使 Web 服務器為生產環境做好準備以及為生產方案提高穩定和性能這些方面。但是,Windows Vista 中附帶的核心開發和管理功能將保持不變,而且,當 IIS 7.0 的服務器版本完成時,預計將通過 Service Pack 將其改進提供給 Windows Vista。那時,您的客戶端和服務器計算機將再次運行完全相同的 IIS 版本,這樣,您就可以繼續在運行 Windows Vista 的桌面機上開發和測試 Web 應用程序了。
若要對 IIS 7.0 建立初步認識,請參閱 Web 上提供的大量非常有用的資源,首先是 iis.net 網站,它是 IIS 團隊的新主頁。我們的新站點是包含所有 IIS 7.0 相關信息的門戶,其中包括所有 IIS 7.0 功能的詳細文章和使用步驟。請確保使用論壇提問并與 IIS 團隊及 IIS 社區一起討論問題。
還可以在我的博客 www.mvolo.com 上查找 IIS 7.0 的深入介紹和內部信息。請務必來訪,好讓我知道您喜歡的 IIS 7.0 主題,而且我將在我的博客中盡力討論它們。
http://msdn.microsoft.com/msdnmag/issues/07/03/IIS7/default.aspx?loc=zh
轉載于:https://www.cnblogs.com/shanyou/archive/2007/11/25/iis7vista.html
總結
以上是生活随笔為你收集整理的IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: g4600黑苹果efi_Matebook
- 下一篇: 解决Windows客户端访问vsftpd