WCF实例 - 简介
原文鏈接:WCF by Example - Introduction
Sharpy - 一個Metro項目
當前, 我正在從事一個新的Metro應用程序的項目:Sharpy。我打算為Sharpy應用程序的服務端使用在WCF實例的文章中所討論的模式。這個目標是為了演示Metro應用程序和我們目前所遇見過的應用程序類型的相似性。目前還沒有可用的代碼,但希望這個很快就會改變。我希望你能喜歡。這篇文章在這里。
最近的更新
本系列最后添加的一篇文章是“WCF實例 – Chapter XIV - 驗證和異常管理”,這篇文章寫于2011年1月初,討論的是如何在包含驗證屬性的組合體中實現IDataErrorInfo接口。這個實現方式提供了一個比較全面的驗證機制,同時工作于客戶端和服務端。這篇文章也討論了異常和警告管理。
最近,對一個客戶端服務組件進行了重構,當一個新的契約被創建或方法被添加或修改時,以減少客戶端請求實例(artefacts)的數量。代碼已經在Codeplex的trunk分支上。由于這些改變的結果,導致原有的文章需要修改,在這些分支上的代碼也需要修改。在2012年10月,這個解決方案得到了修改,所以NHibernate也配置為和SQL-CE 4.0協同工作。你也許想檢驗一下看看你的應用程序使用SQL-CE和NHibernate一起運行會得到什么。
在2010年12月,這個應用程序的服務端被部署到Azure,在codeplex上有一個隨時可以運行的客戶端。WPF客戶端可以調用在Azure上以WebRole方式部署的方法。這個源代碼(edirectory.wpfclient.azure.zip)可以在CodePlex找到。
你也許想跟隨這個系列、代碼的更新:@enriquealbert/wcfbyexample
簡介
這篇文章是這個系列的第一篇,討論的是如何使用WCF為通信及NHibernate持久化設計和開發一個WPF客戶端的目的。
設計企業級應用程序需要一些復雜的技能。在中小型項目里,時間和資源的分配并不方便的在更大項目中推廣。這個時候,一個為最佳實踐和模式的資源可以變得非常有益。有很多文章,書籍以及其他資料涵蓋特定的方面,但幾乎不可能找到一個地方把所有的技術和模式應用到一塊以提供一個為什么和怎么做的綜合方案。
這些文章的意圖是提供怎么開發一個從早期階段到功能健全階段的企業級應用程序的一個例子。這些文章建立在那些已經涵蓋新的方面或現有功能增強的架構的結果。
在這個系列中假設遵循敏捷實踐,所以解決方案的架構聚焦于為RAD,DDD和TDD原則提供靈活的機制。架構的關鍵方面是要求能部署為一個業務探索目的的完整功能客戶端,它只要求一個最基本的基礎設置的覆蓋。避免數據庫,部署到IIS上,等等。
背景
這個架構有如下要求:
- 使用WPF作為富客戶端
- 使用WCF服務來連接客戶端和服務端
- NHibernate用來作持久化
- 客戶端應用程序能運行在基于內存倉庫
- 探索客戶端的部署必須保持簡單
- 應用程序必須是容易測試,這些測試可以基于內存或NHibernate倉庫運行
其他假設:
- 我們可以完全控制從客戶到服務器的組件
- 我們可以隨意創建數據庫,而不使用遺留的數據庫
- 我們使用IIS7和WAS部署的服務器組件以及TCP/IP
- 在數據庫表中我們通過主鍵來控制,在這個項目中,為所有的實體使用唯一長字段
eDirectory解決方案
在這個系列中,我們打算開始使用一個非常簡單的業務場景。在這個系列中,焦點在于架構而不是業務領域。在將來,如果我們覺得我們想探索一些更復雜的架構概念,我們可能會擴裝我們的領域。
這個業務領域基于一個簡單的契約列表,當前,因為很簡單,所以只需要一個實體就滿足:Customer。這個方案命名為eDirectory。
源代碼可以再codeplex上找到:WCF by Example
最后一個版本可以再trunk分支上找到,每一個章節位于它們自己的標簽分支里。你可能想使用Codeplex的瀏覽功能來瀏覽這些分支。
架構概述
eDirectory應用程序定義了3個很不同的應用程序組成部分:數據庫,服務器和客戶端。
客戶端和服務器端被分在不同的層里。在大多數情況下,各層之間沒有相互關系。中間層使用解耦的機制,以便可以采用不同的實現。有些服務可以跨層訪問。
如我們之前提到的,我們可以完全控制客戶端和服務端。所以我們不會轉播服務發現,而是讓服務契約能在程序客戶端和服務器端都可用。這對于DTOs和有些共通的業務驗證是正確的。結果,一個通用的程序集將定義為包含被服務器和客戶端程序共享的部分。
在服務器端,我們找到那些核心組件,業務領域定義的業務實體和它們的行為(action methods)。然后那些被定義的服務暴露我們領域方法。為持久化和序列化約束的服務在客戶端和服務端只暴露DTOs。結果,實體到DTOs的轉化需要用比較全面的方式來處理。
為了我們的業務領域與數據庫的解耦,我們實體的持久層將負責倉庫組件。我們會在這個兩個層之間定義一個泛型接口。倉庫的兩種具體實現是可用的:內存和NHibernate。
事物管理者是我們工作單元(unit of work)的實現。它的職責是我們的業務事物和業務信息(警告和異常)的處理。
最后,我們有客戶端組件,但不是最小。客戶端是使用MVVM模式設計的WPF程序。這個模式提供了一個簡潔的沒有或非常少的Code behind的XAML組件視圖,XAML的綁定能力協同VIewModel類把服務層的DTOs給呈現出來。
客戶端對服務端層解耦主要分為兩部分。適配器的職責是在執行服務期間所接收過來的業務信息進行管理。WCF代理層的職責是管理WCF服務,這個設計是簡潔的,而且是一個比較好的從客戶端到WCF服務的解耦方式。
Available articles in Codeproject
Date
Article
28-June-2010
WCF by Example - Chapter I - Baseline
05-July-2010
WCF by Example - Chapter II - Repository Locator
10-July-2010
WCF by Example - Chapter III - Response
16-July-2010
WCF by Example - Chapter IV - Transaction Manager
23-July-2010
WCF by Example - Chapter V - Contexts
31-August-2010
WCF by Example - Chapter VI - Baseline MVVM
04-September-2010
WCF by Example - Chapter VII - Contract Locator
15-September-2010
WCF by Example - Chapter VIII - Relay Command
19-September-2010
WCF by Example - Chapter IX - Notify Property Change
16-October-2010
WCF by Example - Chapter X - DI with Spring.Net
04-November-2010
WCF by Example - Chapter XI - NHibernate Implementation
24-November-2010
WCF by Example - Chapter XII - WCF Implementation
19-December-2010
WCF by Example - Chapter XIII - Business Domain Extension
07-January-2011
WCF by Example - Chapter XIV - Validation & Exception Management
Available chapters (source code) in Codeplex
Date
Chapter
14-June-2010
Chapter I - Baseline
14-June-2010
Chapter II - Response
14-June-2010
Chapter III - Response
14-June-2010
Chapter IV - Transaction Manager
14-June-2010
Chapter V - Service Locator
14-June-2010
Chapter VI - Baseline MVVM
14-June-2010
Chapter VII - Contract Locator
29-July-2010
Chapter VIII - RelayCommand
29-July-2010
Chapter IX - Notify Property Changed Pattern
29-July-2010
Chapter X - Dependency Injection
12-September-2010
Chapter XI - NHibernate Implementation
07-October-2010
Chapter XII - WCF Implementation
14-November-2010
Chapter XIII - Business Domain Extension
12-December-2010
Azure Solution - In-memory mode WebRole
07-January-2011
Chapter XIV - Validation & Exception Management
07-October-2011
Client re-factor: ServiceAdapter & CommandDispatcher pattern
轉載于:https://www.cnblogs.com/joe-yang/archive/2012/11/26/2789375.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的WCF实例 - 简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ehcache + mysql例子与性能
- 下一篇: ibm产品的链接