一、前言

通过前面二十几个章节的学习,我们知道了什么是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. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  3. “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)

    前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...

  4. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  5. Unity 序列化 总结

    查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...

  6. Cocos2d Android 环境搭建

    1.在开始之前,需要先准备好资源如下,如果安卓开发环境有了直接装第3.4. 1.JDK      点击下载 (1.6) 2.ADT(已经自带Android SDK)点击下载 3.NDK 点击下载 4. ...

  7. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  8. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  9. ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

  10. Flexible 弹性盒子模型之CSS flex-basis 属性

    实例 设置第二个弹性盒元素的初始长度为 80 像素: div:nth-of-type(2){flex-basis:80px;}   效果预览 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本 ...