一、前言

通过前面二十几个章节的学习,我们知道了什么是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学习之旅—第三个示例之一(二十七)的更多相关文章

  1. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅—第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  2. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  3. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  4. WCF学习之旅—第三个示例之五(三十一)

       上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九) WCF学习 ...

  5. SSIS 学习之旅 第一个SSIS 示例(二)

    这一章还是继上一章例子 进行一些小的知识扩展.主要是为了让大家更快的上手SSIS. 概要设计:    1.按用户组生成CSV文件到Pending目录下,    2.移动Pending目录下的CSV文件 ...

  6. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  7. WCF学习之旅——第一个WCF示例(一)

    最近需要用到WCF,所以对WCF进行了解.在实践中学习新知识是最快的,接下来先做了一个简单的WCF服用应用示例. 本文的WCF服务应用功能很简单,却涵盖了一个完整WCF应用的基本结构.希望本文能对那些 ...

  8. WCF学习之旅—WCF第二个示例(五)

    二.WCF服务端应用程序 第一步,创建WCF服务应用程序项目 打开Visual Studio 2015,在菜单上点击文件—>新建—>项目—>WCF服务应用程序.在弹出界面的“名称”对 ...

  9. WCF学习之旅—WCF第二个示例(七)

    三.创建客户端应用程序 若要创建客户端应用程序,你将另外添加一个项目,添加对该项目的服务引用,配置数据源,并创建一个用户界面以显示服务中的数据. 在第一个步骤中,你将 Windows 窗体项目添加到解 ...

随机推荐

  1. DB1:数据库的创建和文件的修改

    在SQL Server中,使用Create Database创建数据库,使用Alter Database命令,能够修改数据库的数据文件和日志文件. 一,创建数据库 1,在创建数据库时,最佳实践是: 创 ...

  2. CorelDRAW X8 如何破解激活(附国际版安装包+激活工具) 2016-12-15

    之前有位搞平面的好友“小瘦”说CDR X8无法破解,只能用X7.呃……呃……呃……好像是的 其实CDR8难激活主要在于一个点“没有离线激活了,只可以在线激活”,逆天不是专供逆向的,当然没能力去破解,这 ...

  3. jQuery之Deferred源码剖析

    一.前言 大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样, ...

  4. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  5. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part2:clusterware安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 3.安装Clus ...

  6. duang~免费的学习视频来啦:学霸君之全栈测试

    学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...

  7. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  8. C语言中如何判断文件是否存在

    方法一:access函数判断文件夹或者文件是否存在 函数原型: int access(const char *filename, int mode); 所属头文件:io.h filename:可以填写 ...

  9. beans.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...