Microsoft NLayerApp採用基於WCF的分布式服務元件為外界(各種類型的GUI)提供了提供者,用戶端程式只需要添加Service引用即可使用NLayerApp應用程式所提供的功能。在NLayerApp中,分布式服務部分的設計與結構還是比較簡單的,主要包括DistributedServices.Core、DistributedServices.MainModule以及DistributedServices.Deployment三個項目。
DistributedServices.Core
該項目為所有位於分布式服務層的組件提供公用的類型定義與功能實現,比如在這個項目中定義了與異常處理相關的Fault Contract類型與特性(Attribute)定義。
DistributedServices.MainModule
該項目根據NLayerApp應用程式本身的需求,設計了所需的DTO、服務契約(Service Contract)、操作契約(Operation Contract),並根據模組劃分,用C#的partial class特性分別實現了銀行管理、客戶管理和銷售管理三個部分的操作。IMainModuleService介面中定義了NLayerApp的分布式服務所能提供的所有操作介面,而MainModuleService部分類則實現了該介面。根據模組劃分的不同,MainModuleService類的實現部分被分配到三個不同的檔案中:MainModuleService.BankingManagement.cs、MainModuleService.CustomersManagement.cs和MainModuleService.SalesManagement.cs。
開啟IMainModuleService.cs檔案,我們可以看到,對於所有的方法,無論是方法的參數還是傳回值,都是以未經處理資料類型(Primitive Data Types)或者DTO的形式實現資料轉送的。NLayerApp將Domain Entities同時作為DTO來處理,有關DTO以及Domain Entities as DTOs的詳細內容,請參考上篇《Microsoft NLayerApp案例理論與實踐 - 應用程式層》一文,這裡就不再多說了。
在IMainModuleService介面的實作類別MainModuleService類中,各方法都通過IoC容器(前面也詳細講過IoC容器,NLayerApp事實上使用的是Microsoft Unity)獲得應用程式層組件的執行個體,從而執行相應的操作。通過上文我們可以得知,NLayerApp在應用程式層中也是使用IoC容器來獲得倉儲、領網域服務(Domain Service)的具體實現的,由此可見,NLayerApp在層與層之間就是使用的IoC容器實現分層解耦。以下是MainModuleService類中GetBankAccounts方法的實現代碼,從中我們可以瞭解到分布式服務中IoC容器的使用方式。
public List<BankAccount> GetBankAccounts(BankAccountInformation bankAccountInformation){ //Resolve root dependency and perform operation IBankingManagementService bankingManagement = IoCFactory .Instance .CurrentContainer .Resolve<IBankingManagementService>(); List<BankAccount> bankAccounts = null; //perform work! bankAccounts = bankingManagement.FindBankAccounts ( bankAccountInformation.BankAccountNumber, bankAccountInformation.CustomerName); return bankAccounts;}DistributedServices.Deployment
該項目其實就是一個WCF Web Application,它是分布式服務的宿主專案,它可以以Web應用程式的方式部署到ASP.NET Web Server(比如IIS)上。該項目下的MainModule.svc檔案定義了所使用的WCF Service(也就是DistributedServices.MainModule項目中的MainModuleService類);而web.config檔案則對如下資訊進行了配置:
- 用於Entity Framework的連接字串
- 所使用的IoC容器的名稱
- 用於診斷和跟蹤程式的配置資訊
- Web Application的配置資訊
- WCF Service的配置資訊
在部署NLayerApp的時候,需要將DistributedService.Deployment項目部署到ASP.NET Web Server(比如IIS)上,並啟動Web伺服器,之後,用戶端程式即可通過WCF的用戶端配置以及代理類來訪問NLayerApp的應用程式了。
分布式服務程式的調試
我們可以用soapUI工具來進行分布式服務的調試。soapUI是一款先進的開源的針對Web Service的調試與測試載入器,你可以點擊此處查看該工具的官網首頁,並從中獲得下載連結。現在,讓我們開始使用soapUI來進行分布式服務程式的調試(由於本人的系統是英文版,為了避免翻譯的不準確性以致誤導讀者,因此請讀者朋友們自行參照自己的中文版系統進行演練)。
總結
本文主要對NLayerApp的分布式服務所涉及的各個項目做了簡單介紹,同時還給出了一個實踐案例,對分布式服務的測試與調試進行了詳細示範。分布式服務部分是用戶端程式與NLayerApp應用程式進行互動的介面部分,不包含任何商務邏輯與任務協調操作,它只是一種通訊手段的技術實現。
NLayerApp的介紹也差不多快結束了,本系列文章將不再繼續對其GUI部分做詳細敘述了,因為GUI部分的開發與特定技術的結合非常緊密,比如WPF、Sliverlight以及ASP.NET MVC,有關這些內容,讀者可以參考相關資料一起閱讀學習,本系列文章就不再繼續對WPF、Sliverlight以及ASP.NET MVC這些技術本身做進一步介紹了。