。NET Framework 3.0(以前稱爲 WinFX)就是我們前進路上的下一個目標。建立在這一新版 Framework 上的應用程序可通過 Visual Studio 2005 創建,對大多數 Windows 開發人員來說,這樣的應用程序將會更加熟悉。。NET Framework 3.0 是從 2.0 版本演化而來,並在原來的基礎上添加了許多新的功能。。NET Framework 3.0 計劃於 2006 年底發佈,適用於 Windows Vista、Windows Server 2003 和 Windows XP.
本文對 .NET Framework 3.0 及其組件進行了整體描述,目的是讓大家對這一新版本有一個清晰的瞭解,同時分析了採用的技術,並給出簡要說明。
創建現代應用程序:主要挑戰
今天,開發一款優秀的應用程序可不簡單 - 您需要考慮衆多的要求。傳統的考慮因素,如訪問數據、通過 Web 瀏覽器上網等固然重要,但這些已經顯然不夠了。下面列出了現代應用程序面臨的一系列新挑戰:
組織越來越傾向於從面向流程的角度看待他們的工作。由於大多數應用程序已經對業務流程實現了部分自動化,因此,在代碼中明確流程中的這幾個步驟就非常重要了。而要實現這一目標,最有效途徑是使用工作流技術,這是一種需要支持基於工作流的應用程序的方法。
通常來講,應用程序要與組織內外的其他應用程序進行通信。現代應用程序還必須適用於面向服務的架構 (SOA),同時還要實現一些功能,作爲其他軟件可以訪問的交互服務。要實現這些目標,就需要支持面向服務的應用程序。
對於使用應用程序的人員來說,通常還需要有傳遞識別信息的方法。目前定義和使用數字標識的技術各不相同,這也是造成網頁仿冒等問題氾濫的原因。有鑑於此,現代應用程序及其使用者將會從一致的數字標識用戶控件中受益。
對於現代用戶界面,人們的要求也有了很大幅度的提高。要提供真正的業務價值往往需要處理不同類型的文檔,使用二維或三維圖形,播放視頻等等,還要保證本地 Windows 客戶端和 Web 瀏覽器能夠兼容這些功能。要滿足這些要求,需要不同的用戶界面採用統一的方法。
一般說來,現在的應用程序需要應對以上部分或全部的挑戰,因此,這些應用程序的開發平臺應該採用一致、可行的方法來解決所有的相關問題……NET Framework 3.0 就是專爲解決這些 Windows 應用程序難題而設計。
應對挑戰:.NET Framework 3.0 功能介紹
如圖 1 所示,.NET Framework 3.0 版是在以前版本的基礎上完善而成。事實上,3.0版本保留了 .NET Framework 2.0 的全部功能,因此,在以前版本基礎上開發的應用程序仍然可以正常使用。.NET Framework 3.0 添加了四個新組件:Windows Workflow Foundation、Windows Communication Foundation、Windows CardSpace 和 Windows Presentation Foundation。本節將會概要介紹 .NET Framework 2.0 和上述四個新組件的功能。
圖 1
·NET Framework 2.0:Windows 應用程序通用基礎
儘管仍然可以通過 Win32 界面直接編寫軟件,而事實上卻是,。NET Framework 已經成爲編寫新 Windows 應用程序的主流環境。如下所示爲。NET Framework 最重要的組成部分:
· ASP.NET,支持可 Web 訪問的應用程序的開發。
· ADO.NET,允許應用程序訪問相關的其他類型數據。
· Windows Forms,支持建立 Windows 應用程序的圖形用戶界面 (GUI)。
· System.XML,使應用程序能夠使用 XML 定義的數據,包括 XSLT 和 XPath.
Framework 的 2.0 版本在以前版本的基礎上添加了幾項實用功能,包括對開發 ASP.NET Web 應用程序的技術改進,支持在 64 位 Windows 上運行的 64 位應用程序,還增加了處理事務的新方法。雖然 .NET Framework 2.0 中的部分組件爲 3.0 版本中新增組件所取代,但是 2.0 版本的技術仍然是新發布的 3.0 版本的基礎,請見隨後的詳細介紹。
Windows Workflow Foundation:支持基於工作流的應用程序
工作流是一個簡單思路:按照特定順序執行的一系列步驟。您甚至可以認爲每個應用程序都在執行工作流,因爲每個應用程序都執行某些過程。但是,在使用 C#、Visual Basic 或其他編程語言等傳統方法開發的應用程序中,這些過程都隱含在代碼中。這樣做沒問題,但是這些過程被深深地嵌入程序邏輯中,使得其執行或更改愈加困難。
使用工作流技術執行過程邏輯可以有效地解決這一問題。採用工作流技術後,邏輯與普通代碼就不會糾纏在一起,過程中的每一步驟都會明確定義,然後由工作流引擎執行。這樣做的結果就是,過程執行清楚明確。
工作流引擎不是什麼新概念,有些已經在 Windows 和其他系統中得到應用。Microsoft 已經在部分產品中嵌入了工作流引擎。但是,隨着工作流日漸成爲開發應用程序的主流方法,提供適用於 Windows 的單一工作流技術已經勢在必行。這也正是 Windows Workflow Foundation(正式縮寫是 WF )的設計初衷。由於其提供了適用於 Windows 的通用工作流技術,WF 已成爲所有基於工作流應用程序的統一創建基礎。Microsoft 的 Microsoft Office 2007 系統、Windows SharePoint Services 等軟件,以及許多其他公司的應用程序也會使用 WF.
但是,提供通用的工作流技術之路卻是困難重重。舉例來說,如何使用一種方法來滿足不同工作流應用程序的各種要求?WF 給出的答案是,從全局視角來看待工作流。如圖 2 所示,WF 工作流只是一組由 WF 引擎執行的活動。一個活動就是一個類,它可以包含工作流創建者認爲有必要的任何工作。活動可以在不同的工作流中重複使用,因此,在針對新問題創建自動化的解決方案時,過程將會更加容易。
圖 2
提供通用工作流技術面臨另一個困難是,面向人員工作流和麪向系統工作流的傳統分歧。通常來說,工作人員使用的工作流應用程序需要有較高的靈活性,能夠進行實時更改。而一般由系統,也就是由軟件使用的工作流應用程序則相對更加靜態,但要求儘可能高效。WF 綜合考慮了這兩種不同的使用情況,不僅包括面向人員的功能(如更改運行中工作流的功能),同時還支持更多面向系統的操作。
通過 WF 的 Windows 通用工作流技術,。NET Framework 3.0 爲廣大開發人員提供了一種非常有用的軟件開發模式。隨着面向流程的軟件繼續風行,工作流技術也會隨之推廣。
Windows Communication Foundation:支持面向服務的應用程序
無論是通過工作流還是其他方式開發,絕大多數應用程序都需要與其他應用程序進行通信。近幾年來,應用程序間的通信技術發展迅速。在長達數十年的不統一之後,主要供應商之間最終達成了一致的應用程序通信協議。根據 SOAP 這一全球 Web 服務協議,基於 J2EE、。NET Framework 等不同技術平臺開發的應用程序間的互操作性相比以前大爲簡化。它還會使面向服務的架構這一思想爲更多的組織接受。
當然,現在的通信方式已經不少了。以 .NET Framework 2.0 爲例,您可以選擇以下幾種通信方式:
· ASP.NET Web 服務,提供基於 SOAP 的交互通信。
· .NET Remoting,主要用於 .NET 應用程序之間的通信。
· Enterprise Services,支持可擴展的事務性應用程序。
· System.Messaging,通過 Microsoft Message Queuing (MSMQ) 支持隊列消息。
· Web Services Enhancements (WSE),它是 ASP.NET Web 服務的擴展,支持 WS-Security 等新規範。
這些技術都有其自身的價值,在實際應用中也有着各自的地位。可是,既然問題是一樣的,爲什麼要採用好幾種不同的解決方案呢?爲什麼不根據交互服務來建立一個單一的應用程序通信基礎?
這正是 Windows Communication Foundation (WCF) 的設計初衷。有了 WCF,開發人員不必再像從前一樣,處理每一類通信都要使用到不同的應用程序編程接口技術 - WCF (最初的代號爲“Indigo”)以通用的 API 提供通用的方法。在 .NET Framework 3.0 環境下,大多數使用上述技術之一的應用程序將會代而使用 WCF.
WCF 通過 SOAP 提供強大的交互通信支持,這是現代計算機設備的基本要素。它還支持多項 WS-* 規範,如 WS-Security、WS-ReliableMessaging 和 WS-AtomicTransaction.WCF 不需要 SOAP,但是可能會使用其他方法,包括優化二進制協議、MSMQ 隊列消息 和基於 REST 的簡單通信。WCF 同樣採取明確的面向服務方法來進行通信。WCF 不會在對象間進行透明通信,而是爲通信各方提供略微不同的抽象服務。其結果之一就是放開了分佈式對象系統間某些緊密的耦合關係,使得交互出錯減少,並且更容易修改。
無論是在組織內部還是組織之間,應用程序通信都是現代軟件的基本功能。。NET Framework 3.0 以其 WCF 面向服務方法解決了這一難題。
Windows CardSpace:一致的數字標識用戶控件
請您想一下,人們在 Internet 上是如何表示各自身份的。多數情況下是將個人的數字標識作爲一個簡單的用戶名。再加上密碼之後,就可以使用這個標識訪問電子郵件帳戶、網上商店、網上銀行和其他一些金融機構了。儘管這種方法很簡單,現在也在普遍應用,但是用戶名和密碼方式有着無法迴避的缺點。最重要的兩項是:
要記住登錄衆多網站的不同用戶名和密碼,的確讓人不勝其煩。爲了減少這些麻煩,許多人在不同網站使用相同的用戶名和密碼,可這樣又增加了安全風險。
用戶名、密碼和其他個人信息可能會被網頁仿冒者竊取。網頁仿冒者會發送欺騙性電子郵件,誘使受害者去登錄一個假冒網站,比如一個與受害者銀行極其相似的仿冒網站。而這個網站實際上是網頁仿冒者控制的。一旦受害者輸入自己的用戶名和密碼,網頁仿冒者就會利用這些信息,在真網站冒充該用戶,牟取不當利益。
要減少這些問題的危害性,我們需要採用新的方法來管理數字標識。Windows CardSpace(最初代號爲“InfoCard”)是這種新方法中的重要組成部分。爲幫助人們追蹤自己的數字標識,CardSpace 用不同的信息卡來表示每個數字標識。如果網站接受 CardSpace 登錄,那麼用戶在嘗試登錄這一網站時會看到 CardSpace 選擇屏幕,如圖 3 所示。您可以選擇一張卡片,這就相當於選擇了登錄該網站的數字標識。不必再去費心記住數不清的用戶名和密碼,用戶只要記住他們要使用的那張信息卡就可以了。不同的信息卡還包含其他信息,用戶可以通過它控制登錄網站時提交的信息。
圖 3
信息卡表示的這些標識是由一個或多個標識提供者創建而成的。組織可以有自己的標識提供者,而不必依賴於簡單的用戶名和密碼。每個標識提供者都會採用更加強大的加密機制,讓用戶來驗證他們的標識。CardSpace 本身也包含一個自發行的標識提供者,可以在客戶端計算機上運行。使用這一提供程序,用戶可以創建自己的標識,且標識也不必依賴密碼進行身份驗證。網站接受這些自發行 CardSpace 標識,這樣就不必再依賴常見的密碼方法,自然會減少因密碼而帶來的諸多問題。
不用密碼登錄網站,網頁仿冒者也就無密碼可偷了!但是,如果網頁仿冒者成功誘使受害者訪問假冒網站的話,他們還是會竊取用戶的其他信息,如敏感的醫療信息等。要杜絕這種情況,就要求用戶自己能夠區別假冒網站和真網站。爲幫助用戶識別網站,擁有網站的組織應獲取“高度確認認證”。與現在的 SSL 簡單認證不同,新的認證方式涉及到更多、更嚴格的流程,其中包括採用更嚴格的方式來證明申請該項認證的組織的身份。高度確認認證上還可以帶有公司徽標和其他信息,幫助用戶準確識別使用證書的網站是否合法。用戶訪問新網站時,CardSpace 會始終以標準屏幕顯示該網站的證書信息。根據認證的接受程度,屏幕上會自動顯示出對網站標識的確認程度。其目的是,強制用戶明確界定網站是否可信,然後幫助他們作出正確選擇。
Windows CardSpace 實際上是更大的標識元系統的一部分。標識元系統完全基於開放的公共協議,它定義了一種全新的方式,能夠使不同的數字標識技術在各個不同的平臺(包括 Windows 以外的操作系統)和應用程序(包括 Internet Explorer 以外的 Web 瀏覽器)上使用。CardSpace 採取通用的方法來選擇標識和其他 Windows 信息,因而在元系統中扮演着重要角色。並且,由於解決了基本的標識問題,CardSpace 也已經成爲 .NET Framework 3.0 的重要組成部分。
Windows Presentation Foundation:適用於不同用戶界面的統一方法
對幾乎所有的應用程序來說,用戶界面都是重要的組成部分。現在,用戶對這些界面的要求越來越高了。當然,我們仍然需要傳統的菜單驅動式 GUI.但是除此之外,許多應用程序還需要能夠播放視頻、運行動畫、採用二維或三維圖形,以及調用不同的文檔。無論是通過安裝的桌面客戶端還是通過 Web 瀏覽器來訪問應用程序,上述功能都必須可以正常使用。
一直以來,Windows 上的這些用戶界面功能都是以不同方式提供的。例如,開發人員可以使用 .NET Framework 中的 Windows Forms 來創建 Windows GUI,使用 HTML、Java 小程序或 JavaScript 代碼創建 Web 瀏覽器界面,或是使用 Windows Media Player、Adobe 的 Flash Player 等軟件播放視頻,文檔格式則以 Microsoft Word、Adobe PDF 或其他軟件進行定義。很明顯,開發人員面臨着巨大的挑戰:如何使用不同的技術,爲不同的客戶端創建一致的用戶界面。這相當困難。
Windows Presentation Foundation (WPF),最初代號爲“Avalon”,就是爲解決這一難題而設計。WPF 爲所有的這些用戶界面提供一致的技術基礎,從而大幅簡化了開發人員的工作。WPF 採用更爲現代的方法,支持視頻、動畫、二維或三維圖形以及各種類型的文檔,從而可以讓用戶以全新的方式處理信息。此外,WPF 還爲桌面客戶端和瀏覽器客戶端提供了通用基礎,大大簡化了二者的應用程序開發工作。
讓我們以圖 4 中的界面(其中包含了圖像、現場圖、三維視圖等等)爲例說明 WPF 的部分功能。過去,開發人員需要懂得各種技術才能進行工作;而現在通過這種更爲一致的方法,開發人員可以輕鬆製作出類似示例中的用戶界面。
圖 4
另外一個長期困擾用戶界面開發人員的問題是,如何創建高效界面需要的不同角色。軟件開發人員需要編寫相應的界面邏輯,但是,他們並不是定義界面感觀的最佳人選。一般來說,人機交互領域的設計人員和專家更適合這一工作。但是在以前的技術(如 Windows Forms)背景下,這些問題完全由開發人員決定。開發人員和設計人員之間沒有實現真正有效的協作。WPF 藉助於可擴展應用程序標記語言 (XAML) 解決這一問題。XAML 是一種基於 XML 的語言,允許以聲明方式指定用戶界面 -而非代碼。這就,開發工具就能夠根據設計人員創建的可視化顯示,更加容易地生成和使用界面規範。實際上,Microsoft 的一款新產品 Expression Interactive Designer 就是爲此而設計。使用這一工具(其他的由第三方提供),設計人員可以創建界面外觀,然後生成他們所創建界面的 XAML 定義。開發人員將這些定義導入 Visual Studio 之後,就可以着手構建界面所要求的邏輯了。
開發人員創建了直接在 Windows 上運行的安裝版 WPF 應用程序後,就可以使用 WPF 提供的全部功能了。但是,若要創建在 Web 瀏覽器內部運行的客戶端程序,開發人員應創建一個 XAML 瀏覽器應用程序,我們通常稱之爲 XBAP.與安裝版 WPF 應用程序的基本原理相同,XBAP 允許在可下載的瀏覽器應用程序中表示與用戶界面相同的樣式。兩種應用程序可以使用相同的代碼,這也就意味着開發人員不再需要針對桌面和瀏覽器客戶端的不同技術集。特別是按照此類豐富 Internet 應用程序的現狀,在安全沙箱內運行從 Internet 下載的 XBAP,將會限制應用程序的功能。但是,安裝版 WPF 應用程序中提供的大量用戶界面功能子集也可用於 XBAP.
WPF 安裝版應用程序和 XBAP 都可以利用 WPF 的現代圖形支持,其中包括使用硬件加速、支持矢量圖形以及其他更多功能。通過提供更強大的圖形支持功能,WPF 使得一系列數據可視化選項成爲可能,而這依靠 Windows Forms 或其他的早期技術是不可能實現的。WPF 還提供了 XML Paper Specification (XPS) 的基礎,可定義查看、分發和打印固定格式文檔的標準格式。
用戶界面是現代應用程序中複雜而重要的組成部分。通過 WPF,。NET Framework 3.0 提供了一種比較完整和一致的解決方案,用於應對用戶界面方面的難題。其目標是使構建用戶界面的相關人員(包括開發人員和設計人員)能夠更有效的進行工作。
應用 .NET Framework 3.0:設想
理解一組技術如何協同工作的最好方式,就是查看其使用方式的示例。現在假設,一款應用程序要求客戶和代理提交保單。如果使用 .NET Framework 3.0 執行,則會有圖 5 所示的工作流程。
圖 5
圖表左上角所顯示的應用程序業務邏輯,是使用 WF 工作流得以實現的。處理保單是一項多步驟流程,包括根據組織的保險規則來評估此保單,或許要檢查投保人的信用,甚至還要獲得其上司的批准。工作流依靠所需要的其他軟件,以活動方式實現流程中的每一個步驟。如果要訪問存儲數據,工作流中的活動可以使用 ADO.NET.
保險公司可以提供一個呼叫中心,使客戶可以通過電話進行投保。呼叫中心員工使用的客戶端軟件顯示在圖表的右上角,是由安裝版 WPF 應用程序實現的。客戶端使用 WCF 與應用程序業務邏輯進行通信,採用的是經過 WCF-WCF 通信優化的二進制協議。如圖所示,呼叫中心工作人員依靠 Windows CardSpace 來選擇他們在登錄該應用程序時將要使用的標識。
客戶還可以通過網絡進行投保,而保險代理商也可以通過網絡提交保單。爲便於網絡操作,該應用程序使用 ASP.NET 與 Web 瀏覽器進行通信。如圖表的左下角所示,客戶通過 Internet Explorer 來訪問該應用程序,他們可以使用普通的 HTML 界面,也可以使用 CardSpace 來選擇自主設定的標識。第三方也可以爲其他客戶端操作系統和瀏覽器實現標識選擇機制,使得標識元系統能夠擴展至非 Windows 客戶端和 Web 瀏覽器。
保險代理商通過 Internet 訪問該應用程序時可能需要具有更多功能的界面。因此,他們應該使用 XBAP 而非簡單的 HTML 界面。如圖表底部中間位置所示,這些客戶可以共享呼叫中心所用 WPF 桌面應用程序提供的大部分用戶界面功能。由於兩者構建在同一基礎之上,因此應用程序開發人員可以在兩種類型的客戶端中重複使用相同的代碼。對於其他類型的客戶端來說,代理商可以使用 CardSpace 選擇他們針對該應用程序所設定的標識。
最後,此應用程序有可能需要與其他應用程序之間進行互訪。如果批准客戶時要求信用審覈,則最有可能通過調用外部服務實現。或者此應用程序會直接收到外部軟件請求,提供這些外部應用程序可以調用的服務。在這些情況下,如圖表右下角所示,該應用程序依靠 WCF 使用標準 Web 服務進行通信。無論這些應用程序構建於何種技術之上,WCF 對 SOAP 的支持都使得這些應用程序之間的交互變得輕而易舉。
該方案說明了如何使用 .NET Framework 3.0 中最重要的組件來構建出色的應用程序。而此處所舉的簡單示例省略了相當多的選項,因此不能將其視爲該系列技術所有功能的完整說明。相反,該示例只是提供一種思路,用於講解如何使用 .NET Framework 3.0 的不同部分來解決實際的業務問題。