一、前言

通过前面二十几个章节的学习,我们知道了什么是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. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  2. 【.net 深呼吸】程序集的热更新

    当一个程序集被加载使用的时候,出于数据的完整性和安全性考虑,程序集文件(在99.9998%的情况下是.dll文件)会被锁定,如果此时你想更新程序集(实际上是替换dll文件),是不可以操作的,这时你得把 ...

  3. redux学习

    redux学习: 1.应用只有一个store,用于保存整个应用的所有的状态数据信息,即state,一个state对应一个页面的所需信息 注意:他只负责保存state,接收action, 从store. ...

  4. 8、Struts2 运行流程分析

    1.流程分析: 请求发送给 StrutsPrepareAndExecuteFilter StrutsPrepareAndExecuteFilter 询问 ActionMapper: 该请求是否是一个 ...

  5. 谈谈一些有趣的CSS题目(十)-- 结构性伪类选择器

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  6. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  7. const let,console.log('a',a)跟console.log('a'+a)的区别

    const 创建一个只读的常量 let块级作用域 const let重复赋值都会报错 console.log('a',a) a console.log('a'+a) a2 逗号的值会有空格:用加号的值 ...

  8. 直播推流端弱网优化策略 | 直播 SDK 性能优化实践

    弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...

  9. 命名sql数据集

    所谓的命名sql其实也就是数据库里的sql语句,普元EOS里做了一定的封装,以方便在程序中的使用. 命名SQL的基本元素包括: 1. <parameterMap> parameterMap ...

  10. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...