首页 > 代码库 > WCF学习之旅—第三个示例(二十七)
WCF学习之旅—第三个示例(二十七)
一、前言
通过前面二十几个章节的学习,我们知道了什么是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); }}
WCF学习之旅—第三个示例(二十七)