zoukankan      html  css  js  c++  java
  • 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); 
    
        }
    }
  • 相关阅读:
    硬盘安装Win 7系统Windows 7 系统硬盘安装教程(图解)
    修改phpMyAdmin导入SQL文件的大小限制
    金三银四面试季节之Java 核心面试技术点
    2015年校园招聘12家IT公司面试体验
    正则表达式小结
    【译文】NginScript – 为什么我们要实现自己的JS引擎?
    经典算法合集
    【高级JSE技术】线程池
    【高性能服务器】Tomcat剖析
    【高性能服务器】Nginx剖析
  • 原文地址:https://www.cnblogs.com/chillsrc/p/6003137.html
Copyright © 2011-2022 走看看