【正文】
Web 開發(fā)模型,其中包括開發(fā)人員生成企業(yè)級 Web 應(yīng)用程序所需的各種服務(wù)。 的語法在很大程度上與 ASP 兼容,同時它還提供一種新的編程模型和結(jié)構(gòu),可生成伸縮性和穩(wěn)定性更好的應(yīng)用程序,并提供更好的安全保護??梢酝ㄟ^在現(xiàn)有 ASP 應(yīng)用程序中逐漸添加 功能,隨時增強 ASP 應(yīng)用程序的功能。 是一個已編譯的、基于 .NET 的環(huán)境,可以用任何與 .NET 兼容的語言 (包括 Visual Basic .NET、 C 和 JScript .NET.)創(chuàng)作應(yīng)用程序。另外,任何 應(yīng)用程序都可以使用整個 .NET Framework。開發(fā)人員可以方便地獲得這些技術(shù)的優(yōu)點,其中包括托管的公共語言運行庫環(huán)境、類型安全、繼承等等。 可以無縫地與 WYSIWYG HTML 編輯器和其他編程工具(包括 Microsoft Visual Studio .NET)一起工作。這不僅使得 Web 開發(fā)更加方便,而且還能提供這些工具必須提供的所有優(yōu)點,包括開發(fā)人員可 以用來將服務(wù)器控件拖放到 Web 頁的 GUI 和完全集成的調(diào)試支持。 當創(chuàng)建 應(yīng)用程序時,開發(fā)人員可以使用 Web 窗體或 XML Web services,或以他們認為合適的任何方式進行組合。每個功能都能得到同一結(jié)構(gòu)的支持,使您能夠使用身份驗證方案,緩存經(jīng)常使用的數(shù)據(jù),或者對應(yīng)用程序的配置進行自定義,這里只是列出幾種可能性而已。 ? 使用 Web 窗體可以生成功能強大的基于窗體的 Web 頁。生成這些頁時,可以使用 服務(wù)器控件來創(chuàng)建公共 UI 元素,以及對它們進行編程以用于 執(zhí)行常見的任務(wù)。這些控件使您能夠用可重復(fù)使用的內(nèi)置或自定義組件生成 Web 窗體,從而簡化頁面的代碼。 ? XML Web services 提供了遠程訪問服務(wù)器功能的途徑。使用 XML Web services,企業(yè)可以公開數(shù)據(jù)或業(yè)務(wù)邏輯的編程接口,而客戶端和服務(wù)器應(yīng)用程序則可以獲取和操作這些編程接口。通過使用諸如 HTTP 和 XML 消息傳遞之類的標準跨越防火墻移動數(shù)據(jù), XML Web services 可在客戶端 服務(wù)器或服務(wù)器 服務(wù)器方案下實現(xiàn)數(shù)據(jù)的交換。 XML Web services 不用依靠特定 的組件技術(shù)或?qū)ο笳{(diào)用約定。因此,用任何語言編寫、使用任何組件模型并在任何操作系統(tǒng)上運行的程序,都可以訪問 XML Web services。 ? 這些模型中的每一個模型都可以充分利用所有 功能,以及 .NET Framework 和 .NET Framework 公共語言運行庫的強大功能。這些功能以及使用它們的方法概述如下: ? 如果您具有 ASP 開發(fā)技能,則新的 編程模型對您來說將會是非常熟悉的。不過,與 ASP 相比, 對象模型變化顯著,它更為結(jié)構(gòu)化并且面向?qū)ο?。但這也意味著 不是完全向后兼容的;幾乎所有現(xiàn)有的 ASP 頁都必須經(jīng)過一定程度的修改后才可以在 下運行。此外,對 Visual Basic .NET 的一些主要更改也意味著,用 Visual Basic Scripting 版本編寫的現(xiàn)有 ASP 頁通常將不會直接移植到 中。不過,在大多數(shù)情況下,只需對少數(shù)幾行代碼進行必要的修改。 ? 從 應(yīng)用程序訪問數(shù)據(jù)庫是向 Web 站點訪問者顯示數(shù)據(jù)的常用技術(shù)。 使得為此目的而對數(shù)據(jù)庫的訪問比 以往更加方便。它還使您能夠從您的代碼管理數(shù)據(jù)庫。 ? 提供一種簡單的模型,該模型使 Web 開發(fā)人員能夠編寫在應(yīng)用程序級運行的邏輯。開發(fā)人員可以在 文本文件中或在作為程序集部署的已編譯類中編寫這種代碼。這種邏輯可以包括應(yīng)用程序級事件,但開發(fā)人員可以輕松地擴展這種模型,以適應(yīng)他們的 Web 應(yīng)用程序的需要。 ? 提供易用的應(yīng)用程序和會話狀態(tài)功能,它們對于 ASP 開發(fā)人員來說是熟悉的,且容易與所有其他 .NET Framework API 兼容。 ? 對于需要使用像 ISAPI 編程接口(隨附于以前的 ASP 版本中)那樣功能強大的 API 的高級開發(fā)人員, 提供了 IHttpHandler 和 IHttpModule 接口。實現(xiàn) IHttpHandler 接口,給您提供了一種與 IIS Web 服務(wù)器的低級別請求和響應(yīng)服務(wù)交互的手段,并提供與 ISAPI 擴展非常類似的功能,但編程模型卻較為簡單。實現(xiàn) IHttpModule 接口使您可以包含參與對應(yīng)用程序發(fā)出的每個請求的自定義事件。 ? 利用 .NET Framework 和公共語言運行庫中的性能增強功能。另外,它還可以提供相對于 ASP 和其他 Web 開發(fā)平臺來說顯著的性能改進。所有 代碼都是編譯的,而不是解釋的,這就允許對本機代碼采用早期綁定,強類型處理,以及實時 (JIT) 編譯,這里只列舉幾個優(yōu)點而已。 還可方便地分解,即開發(fā)人員可以移除那些與他們開發(fā)的應(yīng)用程序不相關(guān)的模塊(例如,會話模塊)。 還提供豐富的緩存服務(wù)(包括內(nèi)置服務(wù)和緩存 API 兩種)。 還提供性能計數(shù)器,開發(fā)人員和系統(tǒng)管理員可以監(jiān)視這些性能計數(shù)器,以測試新的應(yīng)用程序和搜集有關(guān)現(xiàn)有應(yīng)用程序的度量標準。 ? 在 Web 頁中編寫自定義調(diào)試語句,對排除應(yīng)用 程序代碼中的錯誤非常有幫助。但是,如果不移除它們,則會帶來麻煩。問題是,在應(yīng)用程序準備好移植到生產(chǎn)服務(wù)器時從頁面中移除調(diào)試語句,會需要很大的工作量。 提供 TraceContext 類,在開發(fā)頁面時該類用于在頁面上編寫自定義調(diào)試語句。只有當您已經(jīng)對頁面或整個應(yīng)用程序啟用跟蹤時它們才出現(xiàn) 。啟用跟蹤還將有關(guān)請求的細節(jié)追加到頁面,或者,追加到存儲在應(yīng)用程序根目錄中的自定義跟蹤查看器(如果這樣指定的話)。 ? .NET Framework 和 為 Web 應(yīng)用程序提供默認授權(quán)和驗證方案。可以方便地移除、添加或者替換這些方案,這取決于應(yīng)用程序的需要。 ? 配置設(shè)置存儲在基于 XML 的文件中,這些文件都是人可讀和可寫的。每一個應(yīng)用程序都可以有不同的配置文件,可以擴展配置方案,以適應(yīng)您的要求。 ? 當應(yīng)用程序安裝在同一臺計算機上,但使用不同的 .NET Framework 版本時 ,就說應(yīng)用程序是并行運行的。 ? IIS 使用一個稱為輔助進程隔離模式的新進程模型,它不同于 IIS 早期版本中使用的進程模型。當在 Windows Server 2020 上運行時,默認情況下 使用該進程模型。 維護控件中的狀態(tài) 服務(wù)器控件從 Control 繼承名為 ViewState 的屬性,這使它可以很容易地加入狀態(tài)管理。 ViewState 的類型是 ,它是存儲名稱 /值對的字典。 頁框架將 ViewState 存留到一個字符串變量,將它發(fā)送到客戶端并作為隱藏變量返回。在回發(fā)時,頁框架 分析來自隱藏變量的輸入字符串并填充每一控件的 ViewState 屬性。如果一個控件將 ViewState 用作屬性數(shù)據(jù)而不是專有字段,則在到客戶端的往返過程期間將自動存留該屬性。(如果屬性未存留在 ViewState 中,則回發(fā)時返回其默認值是切實可行的。) 以下代碼段說明在 ViewState 中保存的屬性。 [C] public String Text { get { return (String) ViewState[Text]。 } set { ViewState[Text] = value。 } } 可被存留在 ViewState 中的類型 如果一個類型是可序列化的或具有為其定義的 TypeConverter,則該類型可以存留在 ViewState 中。但是,與具有 TypeConverter 的那些類型相比,只可序列化的類型不但更慢而且生成大得多的 ViewState。使用為基元類型以及為 String、 ArrayList 和 Hashtable 優(yōu)化的有限對象序列化格式,對 ViewState 進行序列化。 ViewState 和性能 控件開發(fā)人員應(yīng)該知道, ViewState 中的任何數(shù)據(jù)自動生成到客戶端的往返過程。因為往返過程影響性能開銷,所以明智的使用 ViewState 是十分重要的。如果有若干依賴通用數(shù)據(jù) 的屬性,則可以通過只將關(guān)鍵元素存留到 ViewState 來優(yōu)化性能??丶? Control 繼承名為 EnableViewState 的屬性,該屬性允許控件的使用者啟用或禁用其 ViewState 的持久性。 使用 ViewState 自定義狀態(tài)還原 為了提高效率,或者為了保存默認情況下不能在 ViewState 中存儲的自定義類型,控件可以自定義在 ViewState 中存儲屬性數(shù)據(jù)的方式。如果控件自定義屬性數(shù)據(jù)的存儲,則該控件必須還提供為從 ViewState 中存儲的數(shù)據(jù)還原屬性值提供自定義實現(xiàn)。 基類 Control 為此目的提供兩個方法: SaveViewState 和 LoadViewState。這些方法具有以下簽名。 [C] protected virtual object SaveViewState()。 protected virtual void LoadViewState(object savedState)。 Overview of the .NET Framework The .NET Framework is an integral Windows ponent that supports building and running the next generation of applications and XML Web services. The .NET Framework is designed to fulfill the following objectives: ? To provide a consistent objectoriented programming environment whether object code is stored and executed locally, executed locally but Interdistributed, or executed remotely. ? To provide a codeexecution environment that minimizes software deployment and versioning conflicts. ? To provide a codeexecution environment that promotes safe execution of code, including code created by an unknown or semitrusted third party. ? To provide a codeexecution environment that eliminates the performance problems of scripted or interpreted environments. ? To make the developer experience consistent across widely varying types of applications, such as Windowsbased applications and Webbased applications. ? To build all munication on industry standards to ensure that code based on the .NET Framework can integrate with any other code. The .NET Framework has two main ponents: the mon language runtime and the .NET Framework class library. The mon language runtime is the foundation of the .NET Framework. You can think of the runtime as an agent that manages code at execution time, providing core services such as memory management, thread management, and remoting, while also enforcing strict type safety and other forms of code accuracy that promote security and robustness. In fact, the concept of code management is a fundamental principle of the runtime. Code that targets the runtime is known as managed code, while code