Microsoft NLayerApp案例理論與實踐 – 分布式服務

來源:互聯網
上載者:User

Microsoft NLayerApp採用基於WCF的分布式服務元件為外界(各種類型的GUI)提供了提供者,用戶端程式只需要添加Service引用即可使用NLayerApp應用程式所提供的功能。在NLayerApp中,分布式服務部分的設計與結構還是比較簡單的,主要包括DistributedServices.CoreDistributedServices.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
  • 在DistributedServices.Deployment項目下,找到MainModule.svc檔案,按右鍵並選擇View in Browser,這將啟動ASP.NET Development Server,並在IE瀏覽器中展示如下頁面:

  • 啟動soapUI,在Navigator Panel中,按右鍵Projects節點,選擇New soapUI Project,此時彈出New soapUI Project對話方塊,在Initial WSDL/WADL文字框中輸入http://localhost:88/MainModule.svc?wsdl,此時Project Name文字框會自動以“MainModule”填充,暫時別管其它的選項,直接單擊OK按鈕

  • 在Navigator Panel中展開MainModule節點,我們可以看到,它包含兩個Endpoint:WS2007ForIntranetClients和BasicBindingForSliverlightClients,這與DistributedServices.Deployment項目的web.config中的配置是相符的

  • 展開BasicBindingForSliverlightClients節點,我們可以看到由IMainModuleService介面所發布的所有方法,展開GetCustomerByCode操作,並雙擊Request 1,在開啟的Request 1對話方塊中,左邊部分列出了調用該操作的SOAP Envelope

  • 在<mic:customerCode>節點上輸入A0001,我們獲得如下Request XML:
    <soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ 
    xmlns:mic="Microsoft.Samples.NLayerApp.DistributedServices.MainModuleService"> <soapenv:Header/> <soapenv:Body> <mic:GetCustomerByCode> <!--Optional:--> <mic:customerCode>A0001</mic:customerCode> </mic:GetCustomerByCode> </soapenv:Body></soapenv:Envelope>

  • 單擊Request 1對話方塊左上方的綠色箭頭,將直接調用GetCustomerByCode方法,並獲得返回結果

  • 要調試分布式服務,首先設定好斷點,然後在Visual Studio中選擇Debug –> Attach to Process菜單,在彈出的Attach to Process對話方塊中,選擇ASP.NET Development Server – Port 88,然後單擊Attach按鈕,這將使Visual Studio進入偵錯模式

  • 再次單擊Request 1對話方塊中的綠色箭頭以調用分布式服務,此時程式的執行將會停在斷點處,供開發人員調試
總結

本文主要對NLayerApp的分布式服務所涉及的各個項目做了簡單介紹,同時還給出了一個實踐案例,對分布式服務的測試與調試進行了詳細示範。分布式服務部分是用戶端程式與NLayerApp應用程式進行互動的介面部分,不包含任何商務邏輯與任務協調操作,它只是一種通訊手段的技術實現。

NLayerApp的介紹也差不多快結束了,本系列文章將不再繼續對其GUI部分做詳細敘述了,因為GUI部分的開發與特定技術的結合非常緊密,比如WPF、Sliverlight以及ASP.NET MVC,有關這些內容,讀者可以參考相關資料一起閱讀學習,本系列文章就不再繼續對WPF、Sliverlight以及ASP.NET MVC這些技術本身做進一步介紹了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.