回《【开源】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文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFWCoreLib.WCFHandler;
using Books.Entity;
using Books.Dao;
using System.Data;
namespace Books.WcfController
{
[WCFController]
public class bookWcfController : JsonWCFController
{
[WCFMethod]
public string SaveBook()
{
var data= ToObject(ParamJsonData);
Book book = ToObject<Book>(ToArray(data)[0]);
book.BindDb(oleDb, _container);//反序列化的对象,必须绑定数据库操作对象
book.save();
return "true";
}
[WCFMethod]
public string GetBooks()
{
BookDao bdao = NewDao<BookDao>();
DataTable dt = bdao.GetBooks("", 0);
return base.ToJson(dt);
}
}
}
bookWcfController对象的功能方法其实与第二章中Web模式的bookController控制器。
一样的,只是接收参数数据与返回json数据的方式一点点的区别而已;再就是bookWcfController对象必须继承框架中的JsonWCFController对象,还有配置类的自定义标签[WCFController]和方法的标签[WCFMethod],用来区别其他模式的控制器。
bookwcfclientController.cs文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using EFWCoreLib.WCFHandler; using Books.WinController.Iviewform; using System.Data; using Books.Entity; namespace Books.Winform.WcfAction { [EFWCoreLib.WinformFrame.Controller.Menu]//与系统菜单对应 [EFWCoreLib.WinformFrame.Controller.View(DllName = "Books.Winform.dll", ViewTypeName = "Books.Winform.Viewform.frmBookManager", DefaultView = true)] public class bookwcfclientController : BaseWCFClientController { IfrmBook frmBook; public override void Init() { frmBook = (IfrmBook)DefaultView; //初始化加载书籍目录 GetBooks(); } //获取书籍目录 public void GetBooks() { //通过wcf服务调用bookWcfController控制器中的GetBooks方法 Object retdata = InvokeWCFService("bookWcfController", "GetBooks"); DataTable dt = ToDataTable(retdata); frmBook.loadbooks(dt); } //保存 public void bookSave() { //通过wcf服务调用bookWcfController控制器中的SaveBook方法,并传递参数Book对象 InvokeWCFService("bookWcfController", "SaveBook",frmBook.currBook); GetBooks(); } } }