微軟.NET戰略和ASP.NET簡介(2)
2024-07-10 13:01:57
供稿:網友
1.1.2.3 microsoft .net 的基本模塊
? 網絡服務一覽
通常說來,一個網絡服務只是一個作為服務――通過internet標準此服務能與其它
網絡服務集成在一起――發行的簡單的應用程序。換句話說,它是可通過url定位的自動將信息返回到需要它的客戶端那里的一種資源。網絡服務一個重要的特點是客戶不需要知道一種服務是怎樣實現的。在本節中,我將向你解釋網絡及網絡服務如何把基于組件技術的最好的方面結合在一起的,并且介紹與網絡服務通信所需的基本框架。
同組件一樣,網絡服務提供“黑匣子”函數,它可以被再次作用而不用關心此服務是怎樣實現的。網絡服務提供被稱為契約的精確定義的接口,此接口描繪了所提供的服務。開發人員可以將遠程服務、本地服務和定置代碼組合在一起而集成應用程序。例如,某公司可以使用如下服務組建一在線商店:微軟護照(原文:passport)服務以驗證用戶身份,第三方個人化服務以使網頁匹配每一個用戶的參數,信用卡處理服務,銷售稅服務,對每個運輸公司的包裹跟蹤服務,鏈接公司內部庫存管理程序的內部目錄服務,以及少量定置代碼以使他們的商店能脫穎而出。
然而,網絡服務與現在的組件技術不同,它不使用需要在服務器和客戶機有明確的、同類型基本構架的具體的對象模型協議,例如dcom、 rmi或 iiop 。盡管與具體組件技術緊密結合的實現在一個受控的環境中能很好地被接受,但它們在網絡環境中變得不切實際。因為一個集成商業程序的參與者會發生變化,隨著時間的推移,技術也在變化,所以在所有參與者間確保一個單一的、統一的體系架構就變得十分困難。網絡服務采取了另外一種途徑,它使用普便存在的網絡協議和數據格式,如http和xml,進行通信。支持這些網絡標準的任何系統都支持網絡服務。
而且,網絡服務契約描述的是以術語報文形式提供的服務,這些服務是由網絡服務生成和接受的,而不是描述服務是如何實現的。通過把重點放在報文上,網絡服務模板就完全對語言、平臺和對象模板一無所知。 用任何一套編程語言、對象模型和平臺的完全特性集,都可實現網絡服務。網絡 服務可在任何平臺被用任何語言所實現的應用程序使用。只要用于解釋服務容量、報文序列和所期望協議的契約得到認同,那么所實現的網絡服務及網絡服務用戶就可相互不同,而不會影響會話另一端的應用程序。
網絡服務模板對最小體系架構的要求很低,以確保網絡服務在使用任何技術和編程語言的平臺上實現和訪問。對網絡服務互用性的解決可只依靠網絡標準。然而,為了使應用程序更容易使用網絡服務,簡單地同意通過標準網絡協議就可以訪問網絡服務是不夠的。當網絡服務和網絡服使用者依靠標準的方式表示數據和命令、表示網絡服務契約 、算出網絡服務所提供的容量時,網絡服務才容易使用。
xml是定義一個標準的、可擴展的用于提供命令和典型數據的語言明顯的一種選擇。雖然為表示命令和典型數據可以定義使用其它技巧(比如編碼為一種查詢字符串)的規則,但xml被專門設計為描述數據的標準元語言。簡單對象存取協議(soap)是以一種可擴展的方式使用xml表示數據和命令的工業標準。網絡服務可選擇用soap決定報文的格式。
xml是網絡服務契約的一種使能技術。服務契約語言 (scl)是記錄網絡服務契約的xml語法。由于scl是基于xml的,所以對開發者和開發工具來說,容易生成、解釋契約。關于scl細則的草案很快會出臺(注意:現在的soap toolkit for visual studio 6.0支持稱為sdl的scl的早期版本)。
disco 規范為服務提供者發布網絡 服務契約和相應的機制描述了一個標準方式,這將使開發者或開發工具可找到契約文獻。當你讀到這里時, disco規范的草案應出臺了。
象soap, scl和disco這樣的標準有助于開發者,因為它們不需要明白和實現所使用的每一個網絡服務的訪問方式。支持這些標準的更好的、已充分測試的、高性能的體系架構將由開發平臺提供,這會大大簡化整個開發過程。
? microsoft .net framework
microsoft .net框架的目的是使你更容易建立網絡應用程序和網絡服務。圖2 顯示了microsoft .net框架的體系。建立在操作系統最上層的服務,是管理運行時代碼需求的common language runtime,這些代碼可以用任何現代編程語言所寫。runtime提供了許多服務,這些服務有助于簡化代碼開發和應用程序的開發同時也將提高應用程序的可靠性。.net framework包括一套可被開發者用于任何編程語言的類庫。在此之上是許多應用程序模板,這些模板特定地為開發網絡站點和網絡服務提供高級組件和服務。
? common language runtime
運行語言(runtime)調入并運行用任何運行感知編程語言所寫的代碼。以運行為目標的代碼被稱為受控(managed )代碼,受控代碼代碼只是意味著在內部可執行代碼與運行自身間存在已定義好的合作契約。對于象生成對象、調用方法等這樣的任務,被委托給了運行語言,這使得在運行語言能為可執行代碼增加額外的服務。
運行語言以交叉語言集成、自描述組件、簡單配制和版本化及集成安全服務為特點。
運行語言使用一種新的能表達大部分現代編程語言語義的通用類型系統,通用類型系統定義了一套標準類型及生成新標準的規則。運行語言知道怎樣生成、執行這些類型。編譯器和解釋器使用運行語言服務定義類型、管理對象、進行方法調用,而不是使用工具或特定于語言的方法。
類型系統的主要設計目的是使多種語言能深度集成。用一種語言所寫的代碼能繼承用另一種語言所寫的類的實現,用一種語言所寫的代碼拋出的異常能被用另一種語言寫的代碼捕獲,象調試和剖析之類的操作會在完全封閉下工作,而不用考慮代碼所用的語言。這就意味著編寫可重用類庫的開發者,不再需要為每一種編程語言或編譯器生成一個版本,并且使用類庫的開發者不再受到為他們使用的編程語言開發的庫的限制。
自描述組件――現在microsoft .net框架上已成為可能――簡化了開發和配制,并提高了系統的可靠性。許多由運行語言提供的服務是由元數據及用于補充可執行代碼的信息所驅動。因為所有的信息都儲存在一起,只有可執行的(代碼)才被稱為自描述組件。
自描述組件的一個主要優點是,使用它們并不需要其它文件。類的定義不需要單獨的頭文件;通過檢查元數據對類的定義可以從組件自身獲得??缯Z言或過程邊界訪問組件并不需要各自的idl文件、類型文件或proxy/stubs;所必需的信息已存在于元數據之中。為識別開發者請示的服務屬性,并不需要展開各自的配制信息。 最主要的是,由于元數據是在編譯過程中由源代碼生成,并與可執行代碼儲存在一起,它將永遠和可執行部分同步。
除了改善對單個組件的配制,microsft .net框架定義了一個應用程序配制模板,以解決定置應用程序安裝和dll版本化(通常被稱為“dll hell”)這一復雜過程的問題,運行語言提供了支持這個模板的服務。
microsft .net框架 引入了組合體的概念。一個組合體是一組資源和類型,并包括有關這些資源和類型的元數據,也就是被作為一個單元配制的。元數據被稱為組合體的名單,它包含象類型和資源表之類能被組合體外看得見的信息,這個名單也包括有關從屬關系之類的信息,例如組合體建立時的版本號。開發人員可以指定版本策略,以指示運行語言是否裝入系統上已安裝的依賴于組合體的最新版本,裝入一指定版本,或在編譯時使用的版本。
某軟件組件的多個拷貝總可以存在于同樣的操作系統上,然而,通常說來,只有其中的一個拷貝能被操作系統注冊、調入內存、執行。對系統來說,定位和調入內存的策略是全局性。.net framework common language runtime 增加了所必須的體系架構以支持管理組件定位和調入的每個應用程序策略,這通常被稱為并行配制。
組合體可以被一個應用程序私有,或被多個應用程序共享。一個組合體的多個版本可以同時配制在同一臺機器上。應用程序配制信息定義了到何處去查找組合體,這樣runtime就能為同時運行的兩個不同的應用程序裝入同一組合體的不同版本。這就消除了由組件版本的不兼容性引起的問題,提高了系統整體的穩定性。如果必要,如果必要,管理員可以為配制時刻的組合體增加配制信息,例如一個不同的版本策略,但是編譯時提供的原始信息永遠不會丟失。
因為組合體是自描述的,所以并不需要在系統上進行顯式注冊。應用程序的配制簡單到只需將文件拷貝到目錄中既可(如果為了使應用程序能夠運行,必須安裝未經組織過的組件的話,情況會稍微復雜一點)。配制信息保存在可被任何文本編輯器編輯的xml文件中。
最后,運行語言也提供完整的、普遍深入的安全服務,以確保未經授權的用戶不能訪問機器上的資源,并且代碼不會執行未經允許的動作。這就提高了系統整體的安全性可靠性。 由于運行語言用于裝入代碼、生成對象、執行方法調用,所以當受控代碼裝入內存、執行時,運行語言能進行安全檢查,強化安全策略。
microsft .net框架不僅規定代碼訪問安全,還規定基于角色的安全。通過代碼訪問安全機制,開發人員能為應用程序指定完成工作所必需的權限。例如,代碼或許需要寫文件或訪問環境變量的權力。這類信息和有關代碼標志的信息一起存儲在配制級上的。當代碼裝入內存及執行方法調用時,運行語言驗證是否能給予代碼所要求的權限。如果不能,將記錄一條安全沖突信息。給予權限的策略,這被稱為信任策略,是由系統管理員建立的,并且是建立在關于代碼的證據基礎之上,比如:代碼是誰發布的,是從什么地方獲得的,以及在組合體中找到的代碼標志和它要求的權限。開發人員可以指定他們顯然不需要的權限,以防止其它人惡意使用他們的代碼。如果所需要的權限依賴直到運行時刻才會知道的信息,那么就可寫入綱鄰性的安全檢查。
除了代碼訪問安全,運行語言還支持基于角色的安全。基于角色的安全建立同代碼訪問安全一樣的權限模板,只是這些權限是建立在用戶的身份之上,而不是建立在代碼的標志之上。角色表明了用戶所屬的類,并且可以在開發和配制階段定義。給予權限的策略被分配到每個預定義的角色。在運行時刻,用戶的身份被確定,代碼將代表這個身份運行。運行語言決定用戶是哪個角色的成員,然后給予基于這個角色的權限。
在查看microsft .net框架的可編程模板前,先看一下它所提供的服務。
? 服務框架
在common language runtime之上是服務框架,此框架提供能被任何現代編程語言調用的類。所有的類都遵循一套命名和設計方針,以大大減小開發人員的學習上的彎路。
框架包括一套開發人員希望在標準語言庫中存在的基類庫,例如:集合、輸入/輸出,字符串及數據類。另外,基類庫提供訪問操作系統服務如圖畫、網絡、線程、全球化和加密的類。服務框架也包括數據訪問類庫,及開發工具,如調試和剖析服務,能夠使用的類。本文章沒有詳細討論所有的類,我將重點放在數據訪問類上,因為大多數網絡服務需要對數據的訪問。當然,你可以在microsoft .net framework sdk中找到關于服務框架類庫的附加信息。
? 數據訪問服務
幾乎所有的網絡服務都需要查詢和更新永久性數據,不論是以簡單文件,還是以相關數據庫,或是以其它的存儲類型存在。為了提供對數據的訪問,服務框架包括activex data objects+ (ado.net)類庫。如同名子所暗示地那樣,ado.net由ado發展而來。ado+被設計為基于網絡的可擴展的應用程序和服務提供數據訪問服務。ado.net為連接的指針風格的數據訪問,同時也為更適合于把數據返回到客戶端應用程序的無連接的數據模板提供高性能的apis流,就象在以后介紹的那樣。
就象其余幾個部分一樣,ado.net定義了那些鏈接數據倉庫、 對數據倉庫發送命令及從中獲取結果的類。這些類由受控數據提供者(managed data provider)實現。ado+中鏈接和命令對象看上去和ado中的是一樣的,并且一個名為datareader的新類提供了通過高性能api流獲取結果的能力。datareader在功能上同前向、只讀的ado記錄集(recordset)是等同的,但是datareader被設計用來最小化內存中生成的對象的數量,以提高性能,避免垃圾積累。在.net framework中包含了針對microsoft sql server?的受控數據提供者以及可通過ole db訪問的任何數據倉庫。
ado.net的一個主要創新是引入了數據集(dataset)。一個數據集是內存中提供數據關系圖的高速緩沖區。數據集對數據源一無所知,它們可以由程序或通過從數據倉庫中調入數據而被生成、填充。不論數據從何處獲取,數據集都是通過使用同樣的程序模板而被操作的,并且它使用相同的潛在的數據緩沖區。使用.net平臺的開發人員能夠用數據集代替傳統ado中無連接的記錄集。
受控數據提供者為數據倉庫和數據集公開一名為datasetcommand 的接口對象。dataadpter 使用ado.net鏈接和命令以從數據倉庫中填充數據集,并把在數據集中發生的變化解析到數據倉庫中。
就象datareaders 顯示了對于相關數據的有效的流訪問一樣,xmlreaders 顯示了對xml數據的流訪問。開發人員使用datanavigator 可以滾動和編輯內存中的xml文檔。datanavigator在功能上和w3c document object model (dom)是一樣的,但它更有效,并提供了能很好映射關系數據表的對象模板。datanavigator 支持xpath語法以對數據流進行導航。ado.net為那些希望繼續使用dom作為xml對象模板而不是使用更有效的datanavigator模板的開發人員提供了一個xmldocument類。
由于所有的數據都可被看作xml,所以開發人員可以為任何數據使用轉換和確認服務。ado.net定義了一個消費datanavigator、生成一個新的xmlreader的通用轉換體系。.net framework提供了一個支持w3c xsl transformations (xslt)細則的特殊轉換組件。ado.net同時提供了一使用xml簡圖確認xmlreader的確認引擎。ado.net支持通過dtds, xsd或 xdr定義的簡圖。本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。