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