《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 面向Silverlight的WCF服務(wù)優(yōu)化策略的設(shè)計與實現(xiàn)
面向Silverlight的WCF服務(wù)優(yōu)化策略的設(shè)計與實現(xiàn)
來源:微型機(jī)與應(yīng)用2011年第20期
張學(xué)林, 鐘志農(nóng), 景 寧, 薛 丹
(國防科學(xué)技術(shù)大學(xué) 電子科學(xué)與工程學(xué)院, 湖南 長沙 410073)
摘要: WCF服務(wù)與Silverlight技術(shù)相結(jié)合,為高效開發(fā)RIA應(yīng)用提供了新的途徑。針對WCF服務(wù)技術(shù)在基于Silverlight的Web應(yīng)用開發(fā)中所面臨的問題,對WCF服務(wù)的Silverlight客戶端調(diào)用、WCF服務(wù)繼承機(jī)制的實現(xiàn)以及異步調(diào)用機(jī)制的同步化等關(guān)鍵技術(shù)進(jìn)行研究,提出了相關(guān)的優(yōu)化策略和實現(xiàn)方法,為基于WCF服務(wù)與Silverlight技術(shù)高效開發(fā)Web應(yīng)用奠定了基礎(chǔ)。
Abstract:
Key words :

摘   要: WCF服務(wù)與Silverlight技術(shù)相結(jié)合,為高效開發(fā)RIA應(yīng)用提供了新的途徑。針對WCF服務(wù)技術(shù)在基于Silverlight的Web應(yīng)用開發(fā)中所面臨的問題,對WCF服務(wù)的Silverlight客戶端調(diào)用、WCF服務(wù)繼承機(jī)制的實現(xiàn)以及異步調(diào)用機(jī)制的同步化等關(guān)鍵技術(shù)進(jìn)行研究,提出了相關(guān)的優(yōu)化策略和實現(xiàn)方法,為基于WCF服務(wù)與Silverlight技術(shù)高效開發(fā)Web應(yīng)用奠定了基礎(chǔ)。
關(guān)鍵詞: WCF; Silverlight; RIA; 服務(wù)調(diào)用

    WCF(Windows Communication Foundation)是微軟提出的一個面向服務(wù)的分布式分層架構(gòu),它整合了.Net平臺下所有與分布式系統(tǒng)有關(guān)的技術(shù),為開發(fā)各種不同環(huán)境下的分布式系統(tǒng)提供了一個統(tǒng)一、高效的方法。Silverlight(銀光)是微軟全力打造的一個開發(fā)面向富互聯(lián)網(wǎng)應(yīng)用程序(RIA)的基礎(chǔ)平臺,它改變了傳統(tǒng)Web應(yīng)用程序界面設(shè)計方式,能夠開發(fā)出具有專業(yè)圖形、音頻和視頻的Web應(yīng)用程序,增強(qiáng)了用戶體驗。因此WCF服務(wù)與Silverlight技術(shù)的有機(jī)結(jié)合,為高效開發(fā)RIA應(yīng)用提供了一種新的途徑[1]。但WCF服務(wù)技術(shù)與Silverlight技術(shù)是兩種不同的技術(shù)體系,在開發(fā)基于Silverlight的Web應(yīng)用時,常規(guī)的WCF服務(wù)技術(shù)不能完全適應(yīng)開發(fā)的要求,因此必須對其進(jìn)行優(yōu)化。本文針對WCF服務(wù)技術(shù)在基于Silverlight的Web應(yīng)用開發(fā)中所面臨的問題,對WCF服務(wù)的Silverlight客戶端調(diào)用、WCF服務(wù)繼承機(jī)制的實現(xiàn)以及異步調(diào)用機(jī)制的同步化等關(guān)鍵技術(shù)進(jìn)行研究,提出了相關(guān)的優(yōu)化策略和實現(xiàn)方法。
1 Silverlight和WCF簡介
1.1 WCF技術(shù)簡介

    WCF是微軟基于SOA(Service Oriented Archit -ecture)推出的.Net平臺下的框架產(chǎn)品,它代表了軟件架構(gòu)設(shè)計與開發(fā)的一種發(fā)展方向,在微軟的戰(zhàn)略計劃中也占有非常重要的地位。WCF是使用托管代碼建立和運(yùn)行面向服務(wù)(Service Oriented)應(yīng)用程序的統(tǒng)一框架,它使得開發(fā)者能夠建立一個跨平臺的安全、可信賴、事務(wù)性的解決方案,且能與已有系統(tǒng)兼容協(xié)作。WCF是微軟分布式應(yīng)用程序開發(fā)的集大成者,它整合了.Net平臺下所有與分布式系統(tǒng)有關(guān)的技術(shù),例如.Net Remoting、ASMX、WSE和MSMQ,功能十分強(qiáng)大。
    WCF的整體基礎(chǔ)框架包括服務(wù)端框架和客戶端框架兩個部分[2]:服務(wù)端框架主要將服務(wù)以終結(jié)點的形式暴露出來供潛在的用戶端消費(fèi),并且接收處理客戶端服務(wù)請求、激活服務(wù)對象、執(zhí)行相應(yīng)的操作并返回最終結(jié)果;客戶端架構(gòu)顯得相對簡單,主要是通過服務(wù)代理完成服務(wù)請求和結(jié)果接收。二者的核心都是圍繞服務(wù)契約(ServiceContract)進(jìn)行的。
    一個完整的WCF服務(wù)的應(yīng)用實例包括服務(wù)契約的定義、服務(wù)的實現(xiàn)、服務(wù)的寄宿、元數(shù)據(jù)的發(fā)布和導(dǎo)入、服務(wù)代理的創(chuàng)建和服務(wù)調(diào)用等步驟。
1.2  Silverlight技術(shù)簡介
    Microsoft Silverlight 是一種跨瀏覽器、跨平臺的.NET Framework 實現(xiàn),用于為 Web 生成和提供下一代媒體體驗和富互聯(lián)網(wǎng)應(yīng)用程序(RIA)。Silverlight 統(tǒng)一了服務(wù)器、Web 和桌面的功能,統(tǒng)一了托管代碼和動態(tài)語言、聲明性編程和傳統(tǒng)編程以及 Windows Presentation Foundation (WPF) 的功能[3]。
    傳統(tǒng)的Web 應(yīng)用程序在瀏覽器中以HTML方式呈現(xiàn)界面,在Web 服務(wù)器端實現(xiàn)呈現(xiàn)邏輯控制和客戶端狀態(tài)維持,造成界面頻繁刷新、狀態(tài)維持困難、HTML 難以表達(dá)眾多媒體元素等問題。而實現(xiàn)RIA應(yīng)用的Silverlight 技術(shù),使用XAML 語言描述多媒體界面,在客戶端實現(xiàn)呈現(xiàn)邏輯,通過網(wǎng)絡(luò)與分布在Internet 中的Web 服務(wù)進(jìn)行通信,獲取數(shù)據(jù)資源[4]。
    Silverlight能夠開發(fā)出具有專業(yè)圖形、音頻和視頻的Web應(yīng)用程序,增強(qiáng)了用戶體驗。Silverlight相當(dāng)于一個小型的.NET Framework,可以充分調(diào)用客戶端機(jī)器的處理運(yùn)算能力,使得Web頁面展示如同C/S端程序一般,并且實現(xiàn)了無刷新,帶來了更多的用戶視覺與操作體驗。
2 基于Silverlight與WCF的Web應(yīng)用開發(fā)框架
    傳統(tǒng)的Web應(yīng)用開發(fā)一般采用典型的三層架構(gòu),主要包括數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和表現(xiàn)層[5]。
    數(shù)據(jù)訪問層實現(xiàn)與數(shù)據(jù)庫的交互即對數(shù)據(jù)庫數(shù)據(jù)增、刪、改、查等操作。在一定程度上驗證數(shù)據(jù)的有效性和正確性,但無法確定數(shù)據(jù)作用,不負(fù)擔(dān)任何業(yè)務(wù)邏輯。
    業(yè)務(wù)邏輯層實現(xiàn)相應(yīng)業(yè)務(wù)邏輯數(shù)據(jù)的轉(zhuǎn)換處理以及生成。對流入數(shù)據(jù)的有效性和正確性進(jìn)行驗證,并轉(zhuǎn)換成相應(yīng)的流出數(shù)據(jù),以達(dá)到業(yè)務(wù)邏輯目標(biāo)。
    表現(xiàn)層實現(xiàn)用戶與系統(tǒng)的交互,直接驗證數(shù)據(jù)的有效性和正確性。它接收用戶請求并返回響應(yīng)數(shù)據(jù)結(jié)果的展現(xiàn),而具體的數(shù)據(jù)處理則轉(zhuǎn)到業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層進(jìn)行處理。
    WCF服務(wù)技術(shù)與Silverlight技術(shù)的出現(xiàn),為開發(fā)高擴(kuò)展性、豐富用戶交互方式的Web應(yīng)用提供了更高效的方法。其中WCF 技術(shù)提供了多種高效且高可用的企業(yè)級特性,可以把傳統(tǒng)的、獨(dú)立的技術(shù)整合到一起,提供了對可靠性、事務(wù)性、并發(fā)管理、安全性以及實例激活等技術(shù)的有力支持,同時提供了簡單、快捷的遠(yuǎn)程服務(wù)訪問方式。通過WCF技術(shù)可有效提高應(yīng)用系統(tǒng)的兼容性和擴(kuò)展性,并降低系統(tǒng)內(nèi)部模塊的耦合度。Silverlight技術(shù)是面向RIA的客戶端,為開發(fā)豐富用戶交互方式的Web應(yīng)用提供了支撐。因此二者的結(jié)合能夠完全發(fā)揮各自的技術(shù)優(yōu)勢,完全符合RIA的技術(shù)要求。為此,本文針對WCF服務(wù)技術(shù)以及Silverlight技術(shù)的特點,通過擴(kuò)展傳統(tǒng)的三層Web應(yīng)用開發(fā)框架,提出了基于Silverlight與WCF的Web應(yīng)用開發(fā)框架,如圖1所示。

 

 

    在此框架中,核心是服務(wù)層和用戶控件層。其中服務(wù)層通過WCF服務(wù)的方式對業(yè)務(wù)邏輯層對象進(jìn)行封裝,并為外部(表現(xiàn)層)提供了標(biāo)準(zhǔn)的接口;表現(xiàn)層通過標(biāo)準(zhǔn)的通信方式調(diào)用WCF服務(wù)以實現(xiàn)對業(yè)務(wù)邏輯對象的訪問。服務(wù)層的存在,降低了系統(tǒng)的耦合度,提高了系統(tǒng)的擴(kuò)展性,并通過WCF服務(wù)的方式提高了系統(tǒng)的應(yīng)用性能。
    用戶控件層直接支撐表現(xiàn)層,在Silverlight客戶端環(huán)境下,為表現(xiàn)層的開發(fā)提供了各種Silverlight控件支持。在Web應(yīng)用客戶端開發(fā)中,只需對一些控件進(jìn)行組合擴(kuò)展,便可開發(fā)出各種滿足表現(xiàn)層頁面,展示需求用戶界面;通過調(diào)用服務(wù)層的WCF服務(wù),以實現(xiàn)對各種業(yè)務(wù)邏輯對象的訪問。通過用戶控件層可大大提高用戶界面的開發(fā)效率。
    另外,在Web應(yīng)用開發(fā)中,可根據(jù)實際提取出一些通用方法和數(shù)據(jù)對象實體,封裝為通用類庫和業(yè)務(wù)數(shù)據(jù)實體類,分別作為系統(tǒng)開發(fā)的輔助工具類庫和全局共享的數(shù)據(jù)類,以提高系統(tǒng)的開發(fā)效率。
3 面向Silverlight的WCF服務(wù)優(yōu)化
    Silverlight技術(shù)與WCF服務(wù)的結(jié)合符合當(dāng)前Web應(yīng)用的開發(fā)趨勢,但在面向Silverlight的Web應(yīng)用開發(fā)環(huán)境下,通用的WCF調(diào)用方法、異步/同步調(diào)用機(jī)制以及WCF服務(wù)繼承機(jī)制不能完全適應(yīng)系統(tǒng)的開發(fā)要求,因此針對Silverlight對WCF服務(wù)進(jìn)行優(yōu)化,成為基于Silverlight技術(shù)與WCF服務(wù)技術(shù)開發(fā)Web應(yīng)用的關(guān)鍵。
3.1 Silverlight客戶端調(diào)用WCF服務(wù)的設(shè)計實現(xiàn)
     在WCF服務(wù)框架下,服務(wù)器端的服務(wù)不管客戶端服務(wù)代理的調(diào)用方式(同步或者異步),其設(shè)計與實現(xiàn)始終是一致的。在客戶端,WCF通過客戶端創(chuàng)建代理進(jìn)行服務(wù)的調(diào)用,服務(wù)代理對象的創(chuàng)建有兩種方式[2]:
  一種是代理構(gòu)造法,即借助相關(guān)工具導(dǎo)入服務(wù)元數(shù)據(jù)生成代理類。.NET環(huán)境下,面向Silverlight客戶端提供的一種通用方法(“添加服務(wù)引用”)就是這種方法。此種方法實現(xiàn)簡單,但是由于服務(wù)代理是由統(tǒng)一的工具生成,生成規(guī)則有限,一旦應(yīng)用系統(tǒng)客戶端代理需要統(tǒng)一地實現(xiàn)或更改,如服務(wù)契約的繼承機(jī)制層級關(guān)系的恢復(fù),就需要對每個服務(wù)代理進(jìn)行手工修改,尤其對于一次產(chǎn)生多個服務(wù)代理對象應(yīng)用的情形,這種方式效率較低且難以形成調(diào)用機(jī)制的一致化。
   另一種方法是通道工廠法,即直接使用通道工廠(ChannelFactory<T>)來調(diào)用服務(wù)操作。通道工廠法相對來說具有更好的靈活性和擴(kuò)展性,更適合于系統(tǒng)應(yīng)用的底層。但是,這種方式需要客戶端共享服務(wù)契約接口的定義,一般情況下直接共享服務(wù)契約,客戶端需同步調(diào)用服務(wù)操作,而Silverlight客戶端不支持同步數(shù)據(jù)操作,只支持異步數(shù)據(jù)操作,因此在Silverlight客戶端需要生成異步方式服務(wù)契約代理類。
   為解決上述問題,本文提出采用通道工廠法靈活創(chuàng)建面向Silverlight的WCF服務(wù)的統(tǒng)一異步機(jī)制客戶端代理。創(chuàng)建如圖2所示流程:首先發(fā)出服務(wù)操作調(diào)用請求,根據(jù)其服務(wù)類型確定服務(wù)地址即WCF服務(wù)的終結(jié)點,進(jìn)而判斷是否已生成相應(yīng)異步方式服務(wù)契約代理類,如果沒有,則先生成相應(yīng)的服務(wù)代理類,然后再直接創(chuàng)建相應(yīng)的通道工廠實例調(diào)用服務(wù)異步執(zhí)行相關(guān)操作,最后返回操作結(jié)果。

    根據(jù)上述客戶端服務(wù)調(diào)用流程,在客戶端保留了與服務(wù)器端共享一致的服務(wù)契約代碼,暴露相關(guān)服務(wù)契約類型和操作,以便客戶端潛在地調(diào)用,同時設(shè)計和實現(xiàn)了如圖3所示的客戶端服務(wù)調(diào)用框架:通過ServiceCallBuilder<TService>解析服務(wù)操作請求得到相應(yīng)的服務(wù)地址和調(diào)用服務(wù)的方法和參數(shù),然后根據(jù)其服務(wù)地址和類型調(diào)用ServiceChannelFactory<TService>生成相應(yīng)的異步方式服務(wù)契約代理類,進(jìn)而創(chuàng)建相應(yīng)的異步信道工廠的服務(wù)信道,最后結(jié)合ServiceCallBuilder<TService>解析的服務(wù)方法和參數(shù),在ServiceCall<TService>中完成服務(wù)操作的異步調(diào)用。

    AsyncServiceInterfaceFactory和AsyncServiceInterface Generator是對Silverlight客戶端異步方式服務(wù)契約代理類自定義生成的實現(xiàn)。通過應(yīng)用Silverlight客戶端WCF代理自動生成程序集文件(Silverlight.WCF.AutoGeneratedAsyncInterface.dll)采用反射機(jī)制,利用AsyncServiceInterfaceFactory類加載WCF服務(wù)契約類型和Silverlight客戶端WCF代理自動生成程序集文件,然后調(diào)用AsyncServiceInterfaceGenerator中的自定義的Generate方法生成異步服務(wù)契約代理類型和該類型中異步操作的方法,并返回創(chuàng)建的異步服務(wù)契約代理類型,為客戶端調(diào)用提供接口。
    以這種方式實現(xiàn)客戶端代理服務(wù)的異步方式的可控生成,顯然比代理構(gòu)造法的工具生成服務(wù)契約代理類具有更好的靈活性和擴(kuò)展性。
3.2  WCF服務(wù)繼承機(jī)制的實現(xiàn)
    面向?qū)ο蟮脑O(shè)計原則對于WCF服務(wù)設(shè)計來說在系統(tǒng)開發(fā)中有著重要的借鑒價值和實際價值,尤其是WCF服務(wù)的繼承機(jī)制的實現(xiàn)對于提高系統(tǒng)的開發(fā)效率有著重要的作用。雖然服務(wù)契約的定義與接口定義類似,但由于WCF框架自身的限制,WCF契約屬性是不支持繼承的[6]。
    在服務(wù)器端契約繼承關(guān)系上,利用.NET環(huán)境本身對接口繼承的支持,只需要在多層服務(wù)契約接口定義時,在每層接口上標(biāo)記其相應(yīng)的服務(wù)契約屬性(ServiceContract),以支持WCF服務(wù)契約屬性。
    然而,代理構(gòu)造法生成的客戶端服務(wù)代理的創(chuàng)建一般無法還原服務(wù)端契約的層級關(guān)系,這必須通過手工修改代理并導(dǎo)入服務(wù)契約的定義,恢復(fù)契約層級。實際系統(tǒng)開發(fā)中這種手工恢復(fù)的方式大大增加了工作量和復(fù)雜度。而采用3.1節(jié)中所提出的方法生成的Silverlight客戶端服務(wù)代理,可以很方便地完成繼承機(jī)制的統(tǒng)一實現(xiàn)。
    由于客戶端對WCF服務(wù)的調(diào)用并不會影響服務(wù)器端,一個WCF服務(wù)的客戶端代理只需要有其所繼承的上層基類的操作契約,維持相應(yīng)操作契約的特有屬性,則不需要恢復(fù)層級關(guān)系就可以實現(xiàn)對服務(wù)端上層基類操作的調(diào)用。為此,本文設(shè)計創(chuàng)建BaseServiceInterface類在客戶端啟動時結(jié)合與服務(wù)器端共享的服務(wù)契約代碼,注冊所有基類。對于一個WCF服務(wù),可利用3.1節(jié)所提到的客戶端異步方式服務(wù)契約代理類的生成類AsyncServiceInterfaceGenerator中的Generate方法所調(diào)用的自定義方法(GetOperationContra -ctMethods),判斷是否屬于相應(yīng)基類的派生類,并生成所屬基類和自身服務(wù)契約所有操作異步方法及操作契約屬性。這樣就完全統(tǒng)一實現(xiàn)了客戶端服務(wù)代理的繼承機(jī)制。
3.3  異步調(diào)用機(jī)制的同步化
    Silverlight客戶端是通過異步方式來調(diào)用WCF服務(wù)的,但是對于一些應(yīng)用又需要采用同步的方式來調(diào)用服務(wù),如一些嚴(yán)格要求業(yè)務(wù)流程的應(yīng)用系統(tǒng)。為此,本設(shè)計采用C#迭代器,實現(xiàn)了異步調(diào)用機(jī)制的同步化,來滿足同步調(diào)用服務(wù)的應(yīng)用開發(fā)需求。
    C#迭代器可以返回相同類型的有序代碼塊,通過這些代碼塊能夠?qū)崿F(xiàn)特定的處理功能。迭代器代碼塊與普通代碼塊類似,只是迭代器代碼塊中存在不定量的yield語句。其中,yield return語句生成迭代下一個值;yield break語句設(shè)置迭代終止完成。即關(guān)鍵字yield用于設(shè)置返回值,當(dāng)程序達(dá)到y(tǒng)ield return語句時,會保存當(dāng)前的位置。當(dāng)下次調(diào)用迭代器時,將從這個位置重新開始執(zhí)行。只要函數(shù)成員的返回類型是枚舉器接口或者其中的一個,迭代器就可以用作函數(shù)成員體。
    針對C#迭代器的特點,定義了一個如圖4所示的IAction接口作為枚舉器的執(zhí)行元素,封裝了一個執(zhí)行函數(shù)(Excute)和一個完成事件(Completed),自定義ServiceCall<TService>抽象類實現(xiàn)IAction接口,通過執(zhí)行函數(shù)封裝客戶端異步調(diào)用服務(wù)的全過程并返回當(dāng)前主線程觸發(fā)所注冊的完成事件。其派生類ServiceCommand<TService>和ServiceQuery<TResult, TService>則是由具體的服務(wù)操作執(zhí)行結(jié)果衍生出的返回操作結(jié)果的兩種方式。

    同時設(shè)計了一個ServiceRun類封裝迭代器IAction元素執(zhí)行細(xì)節(jié)。具體實現(xiàn)流程如圖5所示。

    由于所設(shè)計流程是一個迭代循環(huán)的過程,在調(diào)用ServiceRun類的同時自動調(diào)用一個空的IAction元素的完成事件,以達(dá)到啟動迭代器的目的??梢钥闯龇?wù)的調(diào)用完全通過迭代器內(nèi)的元素執(zhí)行,通過yield return返回結(jié)果,回歸主線程后才會繼續(xù)執(zhí)行后續(xù)代碼,基本實現(xiàn)了WCF服務(wù)在Silverlight客戶端異步調(diào)用同步返回,并且維持了WCF服務(wù)調(diào)用的穩(wěn)定性。
    本文針對基于WCF和Silverlight典型的Web應(yīng)用框架對WCF服務(wù)的應(yīng)用限制,在.NET環(huán)境下,設(shè)計并實現(xiàn)了面向Silverlight的WCF服務(wù)客戶端代理通道工廠的方案。在該方案的基礎(chǔ)上,按照面向?qū)ο蟮幕驹瓌t,實現(xiàn)WCF服務(wù)的繼承機(jī)制;采用C#迭代器機(jī)制,完成Silverlight客戶端異步調(diào)用的同步化。這些優(yōu)化進(jìn)一步發(fā)揮了Silverlight技術(shù)在RIA設(shè)計方面的技術(shù)優(yōu)勢,以及WCF服務(wù)自身強(qiáng)大的功能優(yōu)勢,使得該框架具有更高的復(fù)用度和擴(kuò)展性,能顯著提高相關(guān)應(yīng)用系統(tǒng)的開發(fā)效率和性能。
參考文獻(xiàn)
[1] STEARN B. A new approach for developing rich internet  applications[J]. IEEE Internet Computing, 2007,11(3):67-73.
[2] 蔣金楠. WCF技術(shù)剖析(卷一)[M]. 北京:電子工業(yè)出版社,2009:366-367.
[3] 魏永超,銀光志[M]. 北京:清華大學(xué)出版社, 2009:4-7.
[4] 程國雄,胡世清. 基于Silverlight互動學(xué)習(xí)RIA平臺的研究與實現(xiàn)[J]. 計算機(jī)工程與科學(xué), 2010,32(7):23-26.
[5] 王非. RIA系統(tǒng)研究與實現(xiàn)[J]. 微計算機(jī)應(yīng)用,2005, 17(5):100-104.
[6] 張金星.基于WCF的軟件開發(fā)過程中若干問題的研究[D]. 吉林:吉林大學(xué), 2010.  (收稿日期:2011-07-22)
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。