文章出處

一、前言

      通過前面二十幾個章節的學習,我們知道了什么是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); 

    }
}

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()