
摘 要:WCF是微軟基于SOA推出的.net平臺下的框架產(chǎn)品,是對于.Net Remoting,Enterprise Service,WSE,Web Services等技術(shù)的整合。文章闡述了WCF多層服務(wù)架構(gòu)及WCF流傳輸技術(shù),并將其應(yīng)用于軟件協(xié)同開發(fā)平臺的構(gòu)建。
關(guān)鍵詞:WCF;流傳輸;軟件協(xié)同開發(fā)
1 引言
現(xiàn)今,在軟件開發(fā)項(xiàng)目過程中,需求分析員、程序員等各工作人員間需要不斷溝通交流,以期按要求完成項(xiàng)目。目前,很多企業(yè)的軟件項(xiàng)目開發(fā)各成員間通常用E-mail、msn、ftp、OA系統(tǒng),或是會議來實(shí)現(xiàn)交流。這些傳統(tǒng)的交流模式效率相對較低,無法實(shí)現(xiàn)團(tuán)隊(duì)內(nèi)部之間的實(shí)時交流,容易造成工作脫節(jié)、延誤、錯辦等情況。基于WCF的軟件協(xié)同開發(fā)平臺可有效解決上述問題,縮短開發(fā)時間,提高團(tuán)隊(duì)協(xié)作能力,實(shí)現(xiàn)最大程度資源共享。
WCF(Windows Communication Foundation)是微軟基于SOA(Service-Oriented Architecture)推出的.net平臺下的框架產(chǎn)品,是對于.Net Remoting,Enterprise Service,WSE,Web Services等技術(shù)的整合。使用該框架,開發(fā)人員構(gòu)建跨平臺、安全、可靠和支持事務(wù)處理的企業(yè)級互聯(lián)應(yīng)用解決方案。因此,將WCF技術(shù)應(yīng)用于軟件協(xié)同開發(fā)系統(tǒng),從而使得該系統(tǒng)能夠可以被任何應(yīng)用系統(tǒng)、在任何地方進(jìn)行訪問,提高協(xié)同工作效率。
2 基于WCF的面向服務(wù)的多層結(jié)構(gòu)
本系統(tǒng)結(jié)構(gòu)分成客戶層、WCF服務(wù)層、業(yè)務(wù)層、數(shù)據(jù)層。這種開發(fā)模型在客戶層和業(yè)務(wù)層之間增加了服務(wù)層,避免讓業(yè)務(wù)層暴露于客戶層中,如圖1所示。
客戶層: 在本系統(tǒng)中,客戶層采用Windows窗體展示給用戶;在后臺代碼中,通過服務(wù)端與服務(wù)進(jìn)行通訊,具體而言,就是通過訪問WCF服務(wù)的接口,將用戶提交的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫服務(wù)器,并獲取需要的數(shù)據(jù)。
WCF服務(wù)層:服務(wù)層包含一個接口層,定義了接口的方法及安全規(guī)則,包含了WCF服務(wù)契約的具體內(nèi)容。介于用戶界面層和業(yè)務(wù)邏輯層之間,通過服務(wù)層封裝后,再暴露給用戶界面層,當(dāng)業(yè)務(wù)邏輯層有變化時,不會直接影響用戶界面層。使得該服務(wù)可以提供給任何遠(yuǎn)程或本地用戶使用。在系統(tǒng)的設(shè)計過程中為綁定留有接口,為今后模塊變更和業(yè)務(wù)擴(kuò)展提供方便。
業(yè)務(wù)邏輯層:是WCF服務(wù)層接口的具體實(shí)現(xiàn),也就是說,實(shí)現(xiàn)了系統(tǒng)分析提出的業(yè)務(wù)邏輯內(nèi)容。業(yè)務(wù)邏輯層需要從數(shù)據(jù)訪問層得到數(shù)據(jù)庫中的對應(yīng)信息,從而與數(shù)據(jù)庫交互。
數(shù)據(jù)訪問層:數(shù)據(jù)訪問層是業(yè)務(wù)組件和底層數(shù)據(jù)的一個數(shù)據(jù)交互平臺,主要完成數(shù)據(jù)庫操作。數(shù)據(jù)訪問層向業(yè)務(wù)邏輯層提供了統(tǒng)一的數(shù)據(jù)庫訪問接口,業(yè)務(wù)邏輯層調(diào)用該接口訪問數(shù)據(jù)庫。在本系統(tǒng)中,數(shù)據(jù)訪問層使用ADO.NET技術(shù)。
數(shù)據(jù)庫:選用微軟開發(fā)的SQL Server 2005。
3 WCF的流傳輸技術(shù)
通常情況下,客戶端和服務(wù)端進(jìn)行交互、傳遞消息都放到接收端的緩存里,待接收完畢后再進(jìn)行處理。在這種消息處理模式下,當(dāng)客戶端調(diào)用服務(wù)時,要阻塞客戶單進(jìn)程,直到消息發(fā)送完畢,服務(wù)端才開始處理數(shù)據(jù),然后返回處理結(jié)果給客戶端,待客戶端接收完畢,才解除阻塞。當(dāng)消息數(shù)據(jù)很大,如多媒體或圖片,則每次阻塞時間長,效率低下。為了解決這樣的問題,WCF允許接收端通過通道接受消息的同時,啟動對消息數(shù)據(jù)的處理,這樣的過程稱為流傳輸模式。
在WCF中啟用流傳輸模式,先進(jìn)行OperationContract設(shè)置,其必須滿足兩個要求:
(1)保留要進(jìn)行流處理的數(shù)據(jù)的參數(shù)必須是方法中的唯一參數(shù)。例如,如果要對輸入消息進(jìn)行流處理,則該操作必須正好具有一個輸入?yún)?shù)。同樣,如果要對輸出消息進(jìn)行流處理,則該操作必須正好具有一個輸出參數(shù)或一個返回值。
(2)參數(shù)和返回值的類型中至少有一個必須是 Stream, Message 或 IXmlSerializable。
其次,必須在綁定上啟用流處理。需要說明的是,流傳輸模式在特定的綁定協(xié)議中才使用,目前支持的綁定只有BasicHttpBinding,NetTcpBinding以及NetNamedPipeBinding。
4 系統(tǒng)的實(shí)現(xiàn)
現(xiàn)以文檔管理功能模塊為例,研究WCF服務(wù)架構(gòu)和流傳輸技術(shù)解決大數(shù)據(jù)量傳輸問題在軟件協(xié)同開發(fā)系統(tǒng)中的應(yīng)用及具體實(shí)現(xiàn)。
4.1 服務(wù)的創(chuàng)建
IFileInterface為文檔管理模塊客戶端和服務(wù)端進(jìn)行服務(wù)調(diào)用的WCF服務(wù)接口文件(即服務(wù)契約),其本質(zhì)上是對業(yè)務(wù)邏輯的封裝,客戶端可通過該接口進(jìn)行服務(wù)調(diào)用。該服務(wù)契約中定義了兩個契約:1、用于上傳。2、用于下載。部分代碼如下:
namespace Contracts
{
[ServiceContract] //定義服務(wù)契約
public interface IFileInterface
{
[OperationContract(Action = \"UploadFile\")]
void UploadFile(FileUploadMessage request);
[OperationContract()]
void Test(string msg);
[OperationContract]
Stream GetFile(string filePath, string fileName);
}
[MessageContract] //定義文檔上傳的消息契約
public class FileUploadMessage
{
……
}
[MessageContract] //定義文檔下載的消息契約
public class FileGetMessage
{
……
}
}
4.2 服務(wù)的實(shí)現(xiàn)
在服務(wù)契約(接口)定義后,接下來就是實(shí)現(xiàn)該契約即服務(wù)的實(shí)現(xiàn)。業(yè)務(wù)邏輯層中提供了WCF服務(wù)的實(shí)現(xiàn)文件。WCF服務(wù)定義在相應(yīng)的Service項(xiàng)目中,F(xiàn)ilesave繼承了IFileInterface接口,提供WCF服務(wù)的具體內(nèi)容。
4.3 服務(wù)的配置
WCF的配置使用.NET Framework 的Configuration配置系統(tǒng)。在Visual Studio中配置一個WCF服務(wù)時,如果是自托管宿主或Windows Services宿主,則配置文件為App.confing,如果是IIS宿主,則配置文件為Web.config。配置本模塊中的WCF服務(wù)時,宿主是一般的Windows應(yīng)用程序,因而配置文件為App.config。跟WCF相關(guān)的配置中最基本的元素為system.serviceModel,WCF的基本設(shè)置集中在這個元素中。
4.4 用戶界面層的實(shí)現(xiàn)
本系統(tǒng)用戶界面層設(shè)計時應(yīng)用了DevExpress控件。用戶界面程序的配置文件app.config,與服務(wù)的配置一樣,定義了綁定方式為nettcpbinding。將服務(wù)通過終結(jié)點(diǎn)公布出去:將
//配置文件定義,指定服務(wù)器端端品及文件路徑
5 結(jié)束語
本文介紹了基于WCF的面向服務(wù)的多層結(jié)構(gòu)以及WCF流傳輸技術(shù),并將其應(yīng)用于軟件協(xié)同開發(fā)平臺,介紹了系統(tǒng)實(shí)現(xiàn)過程。WCF框架在開發(fā)面向服務(wù)的分布式應(yīng)用上帶給我們?nèi)麦w驗(yàn),在實(shí)際項(xiàng)目開發(fā)中合理應(yīng)用它是十分必要的。
參考文獻(xiàn)
[1]秦超,楊華生. ASP.NET項(xiàng)目軟件協(xié)同開發(fā)模式探討[J]. 大眾科技,2006(1):65-66.
[2]王平,張曉,馬晶. 基于WCF的教學(xué)管理信息系統(tǒng)集成研究與實(shí)現(xiàn)[J]. 軟件導(dǎo)刊,2010,9(9):182-184.