摘 要:.NET框架是Microsoft用於生成分佈式Web應用程序和Web服務的下一代平臺。概述了用於生成分佈式應用程序的.NET框架的基本原理。重點講述了.NET框架的基礎:公共語言運行時(CLR)和微軟中間語言(MSIL),以及.NET革命的核心:Web Service。最後結合具體步驟,給出了利用.NET平臺建造具備良好可伸縮性的分佈式應用程序的過程。前端
關鍵詞:.NET;分佈式計算; Web服務; CLR; MSIL程序員
The Research of Distributed Application Based on .NETPlatform數據庫
LI Hao-chen, CHENHe-bei編程
(College ofComputer Science&Technology,Wuhan University ofTechnology,WuhanHubei430070,China)瀏覽器
Abstract:The.NETFramework isMicrosoft’s next-generation platform for building Distributed Web Applications and Web Services.This article presents an overviewon the.NETFramework’s basic principle for building distributed applications. The point related the.NETFramework’sfoundation: CommonLanguageRuntime (CLR),MSIL(MicrosoftIntermediateLanguage), andthe core ofthe.NET安全
revolution: Web Service.Finally, throughthe concrete step, providedthe processthat constructedthe distributed applicationofthegood flexible function based on the .NETplatform.服務器
Key words:.NET; Distributed Computing; Web Service; CLR; MSIL網絡
當Internet技術特別是Web技術在20世紀90年代中期成爲技術主流時,業務計算的模型發生了巨大變化,而這一變化的焦點則是對傳統的客戶端/服務器(Client/Server)的計算模式產生了巨大的衝擊。首先,客戶機/服務器結構在維護上須要極大的成本,尤爲是當客戶端位於不一樣的區域時;其次客戶端/服務器模式不具備很好的可伸縮性,由於客戶機/服務器結構可以支持的客戶端用戶人數有必定的限度,當客戶端用戶的數目超過200的時候,客戶機/服務器結構的執行效率便開始降低,這對於Internet/Intranet和電子商務等應用系統而言,這種客戶端用戶人數的限制是不可接受的。架構
與此造成對比的是:Web模型是由各類信息和應用程序集合所組成的層鬆散地鏈接而成,而這些信息和應用程序又駐留在種類繁多的硬件平臺上。Internet技術之因此可以取得飛速的發展,其根本的原動力在於它能給用戶提供一個可伸縮、可擴展和高度可用的公共信息傳送平臺。這一平臺設計上很是靈活,並且不侷限於一個或兩個計算層。app
針對Internet/Intranet迅猛發展的現狀,微軟於2000年6月發佈了名爲Microsoft.NET的下一代軟件和服務戰略,使其利用以互聯網爲基礎的分佈式計算和通訊激增的特色,經過先進的軟件構架,利用網絡協議和格式,來協調衆多的智能設備與網站,從而提供更簡單、更爲個性化和更有效的互聯網服務。
本文經過對分佈式體系結構最前沿的發展情況的研究,闡述了微軟最新推出的.NET平臺架構。
從分佈式應用系統的角度來看,一個網絡項目應該具備以下特色:可以與用戶進行交互;處理某些數據;而且在某處保持它的狀態。因而可知,它最少分爲三層:外觀層(Presentation Layer)、事務邏輯層(Business Layer)、數據服務層(Data Layer),或者更多層。將三層結構同單一結構做對比,能夠看到後者把事務邏輯和用戶界面這樣的抽象概念都捆綁在了一塊兒。
.NET框架是一種新的計算平臺,它包含了操做系統上軟件開發的全部層,它提供了微軟平臺(或者說任何平臺上)所曾見過的組件技術、呈現技術和數據技術的最豐富的集成級別,整個體系結構已經被建立爲易於在高度分佈式Internet環境中的應用程序開發,就像進行傳統的桌面系統開發同樣。
.NET框架旨在實現下列目標:
●提供一個一致的面向對象的編程環境,而不管對象代碼是在本地存儲和執行,仍是在本地執行但在Intenet上發佈,或者是在遠程執行的。
●提供一個將軟件部署和版本控制衝突最小化的代碼執行環境。
●提供一個保證代碼(包括由未知的或不徹底受信任的第三方建立的代碼)徹底執行的代碼執行環境。
●提供一個可消除腳本環境或解釋環境的性能問題的代碼執行環境。
●使開發人員的經驗在面對類型大不相同的應用程序(如基於Windows的應用程序和基於Web的應用程序)時保持一致。
●按照工業標準生成全部通訊,以確保基於.NET框架的代碼可與任何其它代碼集成。
圖1所示爲.NET框架。
.NET框架具備兩個主要部件:公共語言運行時和.NET框架類庫。
公共語言運行時(Common Language Runtime,CLR)是.NET框架的基礎,能夠將運行時看做一個在執行時管理代碼的代理,它提供核心服務(如內存管理、線程管理和遠程處理),並且還強制實施嚴格的類型安全以及可確保安全性、可靠性的其它形式的代碼準確性。事實上,代碼管理的概念是運行時的基本原則。
若是據說過虛擬機的話,必定會對JVM(Java VirtualMachine)有所瞭解,Java跨平臺的特性,其實就是利用虛擬機的原理作出來的。所謂虛擬機,就是僅含有指令集的一個通用的虛擬機器。經過虛擬機,可以將中/高級語言的程序編譯爲虛擬機的機器語言程序,再經過虛擬機的Runtime(執行時環境),將這些機器碼轉換成可在本地執行的實體機器的機器碼。
微軟中間語言(Microsoft Intermediate Language,MSIL),就至關於虛擬機的機器碼,它是一種與機器平臺、操做系統都無關的虛擬機的語言。不管使用哪種語言來撰寫程序,當使用.NET開發工具的編譯器來編譯程序的時候,程序都會被編譯成MSIL的格式。
利用MSIL,能夠實現跨語言的合做。例如:咱們能夠利用C#語言與系統整合的特性,設計出程序的核心部分。另外,在程序的前端部分,利用Visual Basic具備簡便、快速開發的特性,可讓程序人員快速地開發出漂亮的程序接口,並在VB的工程中引用或繼承以C#設計出來的核心部分的程序。因爲全部的程序都能編譯成MSIL語言,而全部語言編譯器都能讀懂MSIL的信息,所以可以將之前的C#工程與VB工程整合,以便完成不一樣語言之間的整合。同時,因爲MSIL在延用Win-dows平臺使用的PE(Portable Executable)的基礎上對PE做了擴充,把程序的Metadata(摘要信息)一併寫入可執行文件中,使如今的MSIL程序具備了自我解釋的能力,使系統再也不依賴於登陸數據庫。這種作法不但能夠減小以往的「DLL地獄(DLLHell)」問題,也方便了系統對程序的管理,減小了用戶的負擔。
若是說中間語言是一種虛擬機的語言的話,那麼公共語言運行時(CLR)即是這個虛擬機的實例,也就是要執行這個虛擬機語言的Runtime。CLR的核心是一個執行引擎,它加載、執行和管理已經編譯爲中間字節代碼格式的代碼,這種代碼不被解釋,在執行以前經過內置在CLR中的即時編譯器將它編譯成本機二進制代碼。
這就意味着在.NET中有兩個級別的編譯器,語言編譯器獲得源代碼而且建立MSIL,這種MSIL字節代碼可移植到任何.NET平臺,在執行時,這種代碼再被即時編譯器編譯爲二進制代碼,以便於機器執行。
.NETFramework提供了一套操做系統層級的對象函數庫,可供程序語言調用使用,它爲數據輸入/輸出、安全性等提供了服務和對象模型。例如:ADO的下一代叫作ADO.NET,就駐留在此。此外還包括的內容是利用XML工做的核心功能,包括語法分析器和XSL轉換器。.NETFramework Class Library具備的一個重要特色是它與程序語言緊密結合,將Class Library整合到全部支持.NET的程序語言中,使得全部的語言都有着共同的對象函數庫。這就使得將來的程序員在學習寫程序時,只須要學習這種語言的語法規則以及程序流程便可,至於其它的,由於都是調用同一個函數庫,所須要的方法也就幾乎相同,這對傳統的程序開發人員來說,無疑是一個全新的體驗。
Microsoft.NET是微軟推出的第三代面向互聯網的技術平臺。第三代Internet的特徵將是「可編程Web(Programmable Web)」,各個網站與各個系統之間可以更緊密地整合在一塊兒。B2B(Business to Business)、供應鏈(SupplyChain)、Application Service Provider等也將真正的落實,並且這些Web服務能夠在各類不一樣的便攜設備(如手機、PDA和信息家電等)上執行,真正作到「信息無所不在,隨手可得」的境界。
ASP(Active Server Pages)是微軟開發的基於WindowsNT/2000和IIS(InternetInformationServer)的服務器端腳本環境,是當今很是流行的開放式的Web服務器應用程序開發技術。ASP既不是一種語言,也不是一種開發工具,而是一種技術框架。ASP的主要功能是可以把腳本、HTML組件和強大的Web數據庫訪問功能結合在一塊兒, 造成一個可以在服務器上運行的應用程序,並把按用戶要求專門製做的HTML頁面送給客戶端瀏覽器。
ASP的工做流程大體是:當瀏覽器從Web服務器上請求.asp文件時,服務器調用ASP; ASP全面讀取請求的文件,執行全部的服務器端腳本,並將腳本輸出與靜態HTML代碼進行合併,最終的HTML頁面將在HTML響應中傳送給瀏覽器。
ASP.NET是由ASP發展而來的,但它與ASP有着本質的不一樣,主要有如下幾點:
●ASP屬於一種解釋型的編程框架,它的核心是VBScript和JavaScript。受這兩種腳本語言的限制,決定了ASP沒法進行像傳統編程語言那樣的底層操做;ASP.NET則是一種編譯型編程框架,除了與ASP同樣能夠採用VBScript和JavaScript做爲編程語言之外,還可用VB.NET,C#和JScript.NET甚至是COBOL等編譯型語言來編寫,這就決定了ASP.NET功能的強大,它能夠進行不少底層操做。
●因爲ASP程序是解釋執行的,於是其執行效率相對較低;而ASP.NET程序則是編譯後執行,於是效率比ASP高得多。
●ASP代碼不夠結構化,其中混合了顯示界面的HTML代碼及客戶端和服務器端的腳本代碼,不只程序很難維護,並且調試也是一個大問題;ASP.NET使用事件驅動和數據綁定的開發方式,將程序代碼和顯示的內容分離,使ASP.NET程序更簡潔,也更具可讀性。
●若ASP程序中使用到COM組件,則程序的部署過程就會變得複雜起來,由於組件在使用以前得先註冊,將組件的一些信息(如組件文件的所在位置、線程模型和一些誤別碼等)登陸到系統中,在配置和維護時,DLL陷阱(DLLHELL)問題就會出現;在ASP.NET中,不須要考慮組件註冊問題,只要將相關的文件複製到目標機器就能夠,簡化了部署操做。
●ASP不支持WebService ,而ASP.NET則支持Web Service。
隨着網絡的使用逐漸成熟,開發人員開始用傳統平面格式的編程模式解決一些像可伸縮性、可靠性和自適應性的問題。多層開發開始由局域網鏈接的不一樣計算機上分散應用程序的數據、數據處理過程和用戶見面,經過容許增加和提供冗餘度,使得程序伸縮性更強,更加可靠。
程序設計理念的革新推動了軟件工程的演進,分佈式對象結構也就隨之而生。分佈式對象結構,可說是標準的對象結構與遠端程序調用的結合。當主程序在調用對象時,經過分佈式對象的機制,代爲處理底層的網絡通訊問題,幫主程序定位到存放對象的遠程電腦,並啓動遠端電腦中的對象。等遠端電腦執行完畢後,分佈式對象機制再把返回值返回給主程序。全部這一切,對於調用對象的Client端來講,幾乎是透明的,它並不會明顯感受到本身是在取用遠端的對象。
分佈式對象結構,由最初的RPC(Remote ProcedureCall,遠端程序調用)演進到現今最熱門的由OMG(ObjectManagement Group)組織提出的CORBA、微軟推出的DCOM技術以及Sun公司推出的Java-RMI等。全部的這些分佈式對象結構,因爲它們容許企業重用現有的功能,並提供了封裝的對象方法論,以防對某一業務邏輯的改變會影響到另外一個業務邏輯,所以明顯減小了開發時間和成本。同時,因爲採用了相似於可管理的ORB對象,使得應用分佈式對象的應用程序能夠減小維護和客戶端的負擔。
但具體到每個對象結構標準,又各具備不一樣的特色以及侷限性。例如:DCOM因爲它是基於COM的———用於目前最爲流行的桌面對象模型,而且包含在操做系統中,使得它的建制成本很低,在Windows平臺中廣爲流行。但DCOM自己也存在着問題,首先是客戶電信傳輸功能,大部分防火牆不容許DCOM調用經過,除非你有機會獲得源代碼或在本地請求遠程組件,不然沒有辦法經過查詢DCOM來了解方法和屬性是否可用;還有,DCOM沒有標準的數據傳輸協議。而OMG組織的COR-BA,儘管由於其跨語言、跨平臺的特性而獲得學術界的普遍喜好,但正是因爲開放性產生了兼容性的問題,使得標準難以實現,致使在Object Request Broker之間缺少互用性,而且因爲CORBA並不集成在操做系統中,所以增長了軟件部署的成本。
考慮網絡的性能和編程環境的特徵的分歧,微軟推出了其分佈式對象結構的新標準———SOAP。SOAP(Sim-pleObjectAccessProtocol,簡單對象訪問協議)是對象同信息交換的通訊協議。與之前的DCOM相比,在通訊協議上,因爲其採用標準的應用與WWW服務的標準HTTP協議,而不是DCOM應用的專用的DCE RPC規範,使得其能夠經過防火牆,從而大大減小了網管的工做;在通訊端口上,SOAP使用的是PORT 80,而DCOM使用的則是PORT135;在信息編碼上,SOAP一改傳統DCOM所使用的NDR編碼規則,而採用XML的國際標準做爲信息傳遞的編碼規則,從而容許開發人員用相似HTML格式爲分層的數據傳輸建立定製標記。能夠說:SOAP=HTTP+XML。
Microsoft.NET的理想是全球分佈系統,在單個應用程序中像使用萬能膠同樣使用XML,容許使功能跨越組織甚至跨越世界運行在不一樣的計算機上。在這種設想中,從服務器到無線掌上電腦的系統,以及其間的全部事物,都將共享相同的通用平臺;對於它們所有來講,.NET版本都是可用的,它們之中的每一個都可以與其它方透明地集成。
Web Services是實現這一理想的機制。在Web Services中,軟件功能展現爲一種服務,它並不在意服務的使用者是誰(除非有安全考慮因素),Web Services使得開發人員爲了總體集成和分佈解決方案而創建應用程序時,可使企業應用程序的中心業務要素一般由本地管理,而支持它們的服務(如用戶認證、文件存儲、用戶首選項管理、日曆、郵件等)卻無須本地管理,能夠被無縫訂購。
XMLWeb Services正在開創一個分佈式應用程序開發的新時代,XMLWeb Services是提供特定功能元素(如應用程序邏輯)的可編程實體,任何數量的、多是徹底不一樣的系統均可以用常見的Internet標準(如XML和HTTP)訪問它。XMLWeb Services既能夠在內部由單個應用程序使用,也能夠經過Internet公開以供任何數量的應用程序使用。因爲能夠經過標準接口訪問,所以XMLWeb Services使異類系統可以做爲單個計算網絡協同運行。
在.NET架構下,Web Services轉換爲一種組件服務,從而使得傳統的Web角色有了變化,Web用戶也再也不只是通常的用戶或是瀏覽器,而是新類型的應用程序,如圖2所示。
從圖2中能夠看出:XMLWeb Services是一些應用程序,這些應用程序採用標準協議(如HTTP,XML,XSD,SOAP和WSDL)在可伸縮的、鬆耦合和無狀態環境中提供交換消息的功能。XML Web Services使在異類環境中的公司內部和公司之間生成模塊化應用程序成爲可能,並使得這些應用程序可與各類實現、平臺和設備進行互操做。這些應用程序的基於SOAP的XML消息具備顯式定義部分(結構化的和類型化的)或不嚴格定義的部分(使用任意XML)。在不破壞協議的狀況下,消息隨着時間不斷髮展的能力是XMLWebServices(XMLWebServices用做未來Web的生成塊)的靈活性和可靠性的基礎。
XMLWeb Services經過使用XML消息處理啓用數據交換和應用程序邏輯遠程調用,使數據可以經過防火牆,並在異類系統之間移動數據。雖然數據和應用程序邏輯的遠程訪問不是一個新概念,但以鬆耦合的方式進行這種操做倒是一個全新的概念。XML Web Services的客戶端和XMLWeb Services之間的唯一假設是接收者理解其接收到的消息。這樣,用任何語言編寫的、使用任何組件模型和在任何操做系統上運行的程序都可以訪問XMLWeb Services。
在.NET架構下,微軟使用WSDL(Web Services Description Language,Web Services描述語言)這種用XML開發出的語言來向用戶描述Web Services提供的服務,並依靠DISCO(Discovery of Web Services)規範了用戶程序如何取得Web Services的WSDL;最後經過創建一個跨產業、跨平臺的開放性架構———UDDI(Universal Description,Discovery and Integration),讓WebServices的供應商在上面發佈本身提供的服務,從而讓Web Services的用戶能夠找到本身感興趣的Web Services。
開發分佈式應用程序的一個可能的方案是一次建立一層,多半是從數據層開始,而後移到中間層業務規則對象,最後建立用戶界面層。限於篇幅,本示例以某醫院信息系統(HIS系統)中社保模塊的開發爲例對分佈式應用程序的建立過程做一簡要說明:
(1)首先是生成數據層。在本系統中是採用微軟的SQLServer 2000構建數據庫。
(2)而後建立中間層業務對象。建立的業務對象將在Web服務器上運行,提供分佈式應用程序所需的性能和可伸縮性。另外,將把業務對象實現爲XMLWeb Services,這樣客戶端可使用標準Internet協議從任何平臺與所建立的業務對象進行通訊。其具體步驟是:
①建立ASP. NETWeb服務項目。在此組件中,將建立與數據存儲區的鏈接並經過數據集獲取數據實例。
②建立並配置數據庫鏈接和數據集架構。向XMLWeb Services添加兩個對象:SqlDataAdapter和SqlConnection。鏈接對象建立到數據庫的新鏈接,而數據適配器則查詢或更新數據庫並將結果發送到DataSet數據集對象中。此數據集將用來顯示Web窗體頁中的數據。
③從業務對象中公開數據集。此操做使數據集可供Windows或Web應用程序使用。
(3)建立了用於數據訪問的中間層業務對象並將其公開爲XMLWeb Services後,下一步是建立客戶端界面。本系統建立的是Web窗體頁。經過建立Web窗體應用程序,並將DataSet和DataGrid以及按鈕等控件添加到Web頁,而後設置控件的屬性並編寫相應的代碼。
(4)最後是運行應用程序並部署解決方案。
.NET是一種面向網絡、支持各類用戶終端的分佈式開發平臺環境。微軟的宏偉目標是讓.NET完全改變軟件的開發方式、發行方式、使用方式,使軟件變爲服務。.
NET的核心就是要搭建新一代Internet平臺,用於解決網站之間的協同合做問題,從而最大限度地獲取信息。.NET經過引入Web Services,使得程序設計師能夠將網絡上的Web服務視爲程序的Building Block,從而構建出更富變化、更及時的應用程序,這將對傳統的開發模式提出挑戰;同時,也使得軟件開發商和用戶之間造成一種新的合做關係,即經過互聯網來鏈接的長期合做關係,這也將對整個軟件產業的經營理念產生巨大的影響,併爲整個軟件產業帶來無限的商機,從這個意義上來說,.NET的出現無疑是一次深入的革命。
[1]李慶發·徹底探索Microsoft.NET技術戰略[M].北京:中國青年出版社,2002·
[2] [美]Robert Powell Richard Weeks.C#和.NET架構[M].北京:人民郵電出版社,2002·