通過前面二十幾個章節的學習,我們知道了什麼是WCF;WCF中的A、B、C;WCF的傳輸模式;WCF的寄宿方式;WCF的異常處理。本文綜合應用以上知識點,一步一步寫一個小的WCF應用程式——書籍管理系統(BookMgr)。 這個示例就是一個非常簡單的書籍管理系統,功能有:查詢、修改、新增... ...
一、前言
通過前面二十幾個章節的學習,我們知道了什麼是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);
}
}