博客
关于我
WCF学习之旅—第三个示例之一(二十七)
阅读量:406 次
发布时间:2019-03-06

本文共 2712 字,大约阅读时间需要 9 分钟。

一、前言

      通过前面二十几个章节的学习,我们知道了什么是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);     }}

 

转载地址:http://lkqkz.baihongyu.com/

你可能感兴趣的文章
WCF学习之旅—第三个示例之一(二十七)
查看>>
java ThreadPoolExecutor初探
查看>>
快速指数算法
查看>>
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
查看>>
SpringCloud微服务(03):Hystrix组件,实现服务熔断
查看>>
Spring 框架基础(01):核心组件总结,基础环境搭建
查看>>
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
查看>>
Sentry快速开始并集成钉钉群机器人
查看>>
Cassandra数据建模
查看>>
Internet Explorer 10 专题上线
查看>>
云计算之路-阿里云上:0:25~0:40网络存储故障造成网站不能正常访问
查看>>
网站故障公告1:使用阿里云RDS之后一个让人欲哭无泪的下午
查看>>
上周热点回顾(6.3-6.9)
查看>>
上周热点回顾(8.12-8.18)
查看>>
【故障公告】升级阿里云 RDS SQL Server 实例故障经过
查看>>
蹒跚来迟:新版博客后台上线公测
查看>>
[网站公告]11月26日00:00-04:00阿里云RDS升级
查看>>
[网站公告]又拍云API故障造成图片无法上传(已恢复)
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
查看>>
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
查看>>