一、前言
通過前面二十幾個章節的學習,我們知道了什么是WCF;WCF中的A、B、C;WCF的傳輸模式;WCF的寄宿方式;WCF的異常處理。本文綜合應用以上知識點,一步一步寫一個小的WCF應用程序——書籍管理系統(BookMgr)。
這個示例就是一個非常簡單的書籍管理系統,功能有:查詢、修改、新增、刪除(不包括安全、優化等相關問題)、異常處理。WCF的增刪改查和WinForm相差無幾。WCF只是把具體“實現”寫在“服務端”,而“調用”放在了“客戶端”。
二、BookMgr說明
1)Demo的 “服務端”以本機控制台應用程序為宿主,“客戶端”以WinForm項目為例。
2)Demo的“服務端”提取數據采用初學者比較容易接受的分層結構進行搭建,分別分為服務層、實體層、數據層。
引用關系如下圖所示:

3)Demo數據庫為SqlServer,表為Books(sql語句在下載的壓縮包中“初始化腳本.sql”),表結構如下所示:
| 字段名 |
列名 |
數據類型 |
約束 |
生成方式 |
| 書籍編號 |
BookID |
int |
主鍵,必須輸入 |
自增 |
| 書名 |
Name |
nvarchar(200) |
必須輸入 |
人工輸入 |
| 類別 |
Category |
nvarchar(50) |
必須輸入 |
人工輸入 |
| 出版數量 |
Numberofcopies |
int |
必須輸入 |
人工輸入 |
| 作者ID |
AuthorID |
int |
必須輸入 |
人工輸入 |
| 價格 |
Price |
Decimal(18,2) |
必須輸入 |
人工輸入 |
| 出版日期 |
PublishDate |
datetime |
必須輸入 |
人工輸入 |
| 評級 |
Rating |
nvarchar(5) |
非必須輸入 |
人工輸入 |
三、創建WCF服務端項目結構
- BookMgr.Contracts:一個類庫項目,定義服務協定(Service Contract),引用System.ServiceMode程序集,見下圖。

- BookMgr.Services:一個類庫項目,提供對WCF服務的實現。定義在該項目中的所有WCF服務實現了定義在Contracts中相應的服務協定,所以Services具有對Contracts項目的引用。見下圖1,圖2。

圖1

圖2
- BookMgr.Hosting:一個控制台(Console)應用,實現對定義在Services項目中的服務的寄宿,該項目須要同時引用Contracts和Services兩個項目和System.ServiceMode程序集。見下圖1,圖2。

圖1

圖2
- BookMgr.Common:解決方案中公共使用的類。見下圖。

- BookMgr.Model:一個對象實體項目,實現對數據庫中的表結構進行實體對象構建。通過EF 6來實現。見下圖。

- 最終的項目結構圖如下。

四、創建BookMgr.Contracts項目代碼
1)在項目中創建一個 IBookService接口文件與SQLError文件。見下圖。
2)在BookMgr.Contracts中創建一個表示Fault異常的類SQLError.cs。代碼如下。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace BookMgr.Contracts { [DataContract] public class SQLError { private string _operation; private string _errorMessage; public SQLError(string operation, string errorMessage) { this._operation = operation; this._errorMessage = errorMessage; } [DataMember] public string Operation { get { return _operation; } set { _operation = value; } } [DataMember] public string ErrorMessage { get { return _errorMessage; } set { _errorMessage = value; } } } }
3)在BookMgr.Contracts中IBookService.cs接口文件。並分別創建增、刪、改、查、”Add”、“Edit”、“Delete”、“Get,Search”五個方法,分別對應五個功能的服務應用程序WCF服務應用程序。我在“Edit”方法中添加了一個自定義異常返回的特性。具體代碼如下。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BookMgr.Contracts { public interface IBookService { [OperationContract] string Add(string bookInfo); [OperationContract] [FaultContract(typeof(SQLError))] string Edit(string bookInfo); [OperationContract] string Get(string bookId); [OperationContract] string Delete(string bookInfo); [OperationContract] string Search(string Category, string searchString); } }
