回《【开源】EnterpriseFrameWork框架系列文章索引

EnterpriseFrameWork框架实例源代码下载: 实例下载

本章内容与上一张《利用EnterpriseFrameWork快速开发Winform系统(C/S)》关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模式一样用Json数据格式;

      还有一点就是我们一定要明白WCF模式并不是说把所有业务都封装成wcf服务提供给界面层调用,wcfController跟webController一样只是单纯的业务控制器,而wcf服务在框架中也只有一个就是在WCFHosting服务主机中WCFHandlerService,用来实现通讯的

本文要点:

1.WCF版界面效果

2.WCF项目开发步骤

3.代码文件调用关系图

4.常见问题汇总

1.同样是用书籍的管理作实例,实现对书籍的增、删、改、查功能,我们先看界面效果

如下,请注意红色框部分,点击界面的保存按钮后,第二张图的WCF主机就会接收到保存书籍的命令并执行,红色框为执行过程;(其中WCF主机会再后续章节详细说明)

解决方案目录,其中红色文件为本章实例新增的文件

2.开发步骤:

      1)新增WCF控制器,如上(bookWcfController.cs)

      2)新增WCFCient界面控制器,如上(bookwcfclientController.cs)

其中实体(Book.cs)、Dao(BookDao.cs)和界面(frmBookManager.cs)在上一章实例中已经完成,所以本章直接调用就行了,加上本章新增的bookWcfController.cs和bookwcfclientController.cs就可以让WCF模式实例运行起来;

bookWcfController.cs文件

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using EFWCoreLib.WCFHandler;
  6. using Books.Entity;
  7. using Books.Dao;
  8. using System.Data;
  9.  
  10. namespace Books.WcfController
  11. {
  12. [WCFController]
  13. public class bookWcfController : JsonWCFController
  14. {
  15. [WCFMethod]
  16. public string SaveBook()
  17. {
  18. var data= ToObject(ParamJsonData);
  19. Book book = ToObject<Book>(ToArray(data)[]);
  20. book.BindDb(oleDb, _container);//反序列化的对象,必须绑定数据库操作对象
  21. book.save();
  22. return "true";
  23. }
  24. [WCFMethod]
  25. public string GetBooks()
  26. {
  27. BookDao bdao = NewDao<BookDao>();
  28. DataTable dt = bdao.GetBooks("", );
  29. return base.ToJson(dt);
  30. }
  31. }
  32. }

bookWcfController对象的功能方法其实与第二章中Web模式的bookController控制器。

一样的,只是接收参数数据与返回json数据的方式一点点的区别而已;再就是bookWcfController对象必须继承框架中的JsonWCFController对象,还有配置类的自定义标签[WCFController]和方法的标签[WCFMethod],用来区别其他模式的控制器。

bookwcfclientController.cs文件

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using EFWCoreLib.WCFHandler;
  6. using Books.WinController.Iviewform;
  7. using System.Data;
  8. using Books.Entity;
  9.  
  10. namespace Books.Winform.WcfAction
  11. {
  12. [EFWCoreLib.WinformFrame.Controller.Menu]//与系统菜单对应
  13. [EFWCoreLib.WinformFrame.Controller.View(DllName = "Books.Winform.dll", ViewTypeName = "Books.Winform.Viewform.frmBookManager", DefaultView = true)]
  14. public class bookwcfclientController : BaseWCFClientController
  15. {
  16. IfrmBook frmBook;
  17. public override void Init()
  18. {
  19. frmBook = (IfrmBook)DefaultView;
  20. //初始化加载书籍目录
  21. GetBooks();
  22. }
  23.  
  24. //获取书籍目录
  25. public void GetBooks()
  26. {
  27. //通过wcf服务调用bookWcfController控制器中的GetBooks方法
  28. Object retdata = InvokeWCFService("bookWcfController", "GetBooks");
  29. DataTable dt = ToDataTable(retdata);
  30. frmBook.loadbooks(dt);
  31. }
  32.  
  33. //保存
  34. public void bookSave()
  35. {
  36. //通过wcf服务调用bookWcfController控制器中的SaveBook方法,并传递参数Book对象
  37. InvokeWCFService("bookWcfController", "SaveBook",frmBook.currBook);
  38. GetBooks();
  39. }
  40. }
  41. }

bookwcfclientController对象必须继承BaseWCFClientController对象,且它是与界面层在同一项目中,其他的配置如控制器对应的界面,对应的菜单都与Winform模式winController1控制器一样,也依赖于IfrmBook接口;其实bookwcfclientController具有的功能与Winform的控制器一样,只去掉了操作逻辑层的功能与增加了访问wcfController控制器的功能。

讲到这里不知道大家有没有发现一点,就是从第二章的Web模式,第三章的Winform模式到本章WCF模式,项目的代码文件都是共同使用的,比如第一章web模式中的实体和Dao,第二种Winform模式的界面文件和接口文件都是可以直接使用,并不需要任何一点点的改动,特别是Wcf模式完全可以兼容Winform模式的界面代码;这就是EnterpriseFrameWork框架的特别之处,完全整合了这些模式在框架中;这样在项目中我们可以根据具体情况可以很方便的调整开发模式,降低我们的开发成本。

再讲一下WCF模式的由来,Winform模式是一种非常简单的开发模式,目前大部分应用软件项目基本上都是这样做的,部署简单,服务器装上数据库,程序安装在客户机上。不管开发还是实施都是直接干脆之极,让中小企业在成本与人才各方面考虑都是用的最多的模式。虽然Winform模式简单,但同样也有问题,首先在安全上直接暴露了服务器与数据库操作,再就是不太适合复杂的网络环境,维护升级都极为不方便等。所以随着项目的规模越来越大,一些系统架构上的调整也是必要的。

EnterpriseFrameWork框架中加入WCF开发模式就是基于这些方面的实际需求,所以怎样才能最小代价的扩展成WCF模式,就是一直困扰我的问题,难道要把原有系统中的所有业务都重写封装成wcf服务?重写的代价真的有点大,特别让我接受不了的完全与框架的核心“简洁”冲突了。也参考过其他公司的wcf框架,也是觉得可能把业务封装成wcf服务太麻烦,所以干脆就是对数据库的操作也就是DbHelper对象给用wcf服务封装了,用wcf服务的方式操作数据库,我就傻眼了。直到今年才找到如今这种方式,把Winform模式的控制器给拆分为wcfController和wcfclientController,两个控制器之间用wcf服务通讯。

这也是一次让我非常得意的改进,不知道大家用wcf做项目是一种什么样的开发模式?

3.最后我们看下图,整理一下以上代码文件的调用关系

EnterpriseFrameWork框架实例源代码下载: 实例下载

回《【开源】EnterpriseFrameWork框架系列文章索引

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统的更多相关文章

  1. 五、利用EnterpriseFrameWork快速开发基于WebServices的接口

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWo ...

  2. 二、利用EnterpriseFrameWork快速开发Web系统(B/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题.实例功能就是业务系统中最常见的增.删.改.查来演示,用一个界 ...

  3. 三、利用EnterpriseFrameWork快速开发Winform系统(C/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 上一章讲解了开发Web系统的详细步骤,以书籍的管理作实例实现对书籍的增.删.改.查功能,本章接着上面的实例继续补充用Winform ...

  4. 【DSP开发】利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程

    [DSP开发]利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:前端是时间基于VS ...

  5. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  6. 快速开发基于 HTML5 网络拓扑图应用

    采用 HT 开发网络拓扑图非常容易,例如<入门手册>的第一个小例子麻雀虽小五脏俱全:http://www.hightopo.com/guide/guide/core/beginners/e ...

  7. java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

  8. java_java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

  9. 如何快速开发基于Winform的应用系统

    在我们实际业务开发中,从头开发一个应用系统,不管是基于BS的前端项目,还是基于Winform的CS应用系统,都是由容易到复杂,逐步演化的一个开发过程,如果我们基于一定基础上,并配合一些配套的开发工具, ...

随机推荐

  1. MySQL 分库分表方案,总结的非常好!

    前言 公司最近在搞服务分离,数据切分方面的东西,因为单张包裹表的数据量实在是太大,并且还在以每天60W的量增长. 之前了解过数据库的分库分表,读过几篇博文,但就只知道个模糊概念, 而且现在回想起来什么 ...

  2. iOS获取当前连接的wifi信息

    导入框架CaptiveNetwork #import <SystemConfiguration/CaptiveNetwork.h> 获取当前连接的wifi信息 // 只能获取当前的SSID ...

  3. 让isis支持高德地图

    概述 由于项目需要用到地图,虽然isis的插件库里有个现成的地图实现,不过用的google地图,虽然google地图可以不用注册Appkey,但完全打不开.所以打算改成国产地图. 效果 先看下运行效果 ...

  4. VC++6.0中碰到Cannot access the ClassView information file.ClassView information will not be avaible.的解决方法

    一般情况下是由于类视图文件损坏了,这是经常会发生的现象. 解决步骤: 1.关闭工程,2.删除工程下.clw .ncb 文件及/debug目录,3.重建工程build all. 具体解释如下: dsp ...

  5. C/S模式,发布/订阅模式和PUSH/PULL模式(上)

    CS模式(客户端/服务器模式) 最场景的信息传递模式,也称为Request/Response模式,或者调用模式.http/https协议即此模式.因为最常用所以大家一般都比较熟悉,这里不重点讲了,大家 ...

  6. package-lock.json 作用

    package.json里面定义的是版本范围(比如^1.0.0),具体跑npm install的时候安的什么版本,要解析后才能决定,这里面定义的依赖关系树,可以称之为逻辑树(logical tree) ...

  7. SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,总计(合计),小计

    版权声明:本文为博主原创文章,未经博主允许不得转载.本人观点或有不当之处,请在评论中及时指正,我会在第一时间内修改. https://blog.csdn.net/aiming66/article/de ...

  8. C++继承与多态练习--计算图形面积

    1.目的: /*设计一个计算图形面积的类库. 类库的顶层是一个抽象类,并且提供三个纯虚函数:显示数据成员.返回面积和返回体积. Class Shape { virtual void showData( ...

  9. MySQL学习【第七篇索引管理及执行计划】

    一.索引介绍 1.什么是索引? 索引由如字典,目的就是为了更快寻找到要找的内容. 令搜索查询的数据更有目的性,从而提高数据检索的能力 2.索引类型介绍 1.BTREE: B+树索引 2.HASH: H ...

  10. node.js的http模块创建基本Web服务器

    首先下载node.js模块.终端执行命令 npm i node -g 引入http核心模块 const http =require('http') 引入文件系统模块 const fs =require ...