基于WCF架构的开发spring框架的理解有哪些?

WCF结合WINFORM开发架构问题。
[问题点数:100分,结帖人fengyarongaa]
本版专家分:15
结帖率 100%
CSDN今日推荐
本版专家分:129371
2013年7月 荣获微软MVP称号2012年7月 荣获微软MVP称号2011年7月 荣获微软MVP称号
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
本版专家分:15
本版专家分:129371
2013年7月 荣获微软MVP称号2012年7月 荣获微软MVP称号2011年7月 荣获微软MVP称号
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
本版专家分:136747
2014年10月 荣获微软MVP称号2013年10月 荣获微软MVP称号2012年10月 荣获微软MVP称号
2009年2月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!|
其他相关推荐
&br /&第二部分 中间层均衡负载WCF&br /&&br /&&br /&在第一部分的文章里,简单介绍了一下怎么在WEB层做均衡负载,主要用到的软件是Nginx.这里为啥引用中间层的概念呢?&br /& &br /&最简单的部署方式: WEB层-&访问DB, 这里直联数据库的做法,就是二层架构,WEB层和DB可以放在不同一个服务器上。在用户量和并发量大的时候,WEB层和DB压力都很大,而且还缺乏扩展性,所以大型架构都会采用三层的方式&br /& &br /&三层架构部署方式:WEB层-&中间层-&DB层
WCF 通用契约定义用于所有交互的调用的基接口。
其中WcfRequest和WcfResponse 作为输入输出参数的封装
[ServiceContract]
public interface IWcfService
[OperationContract]
WcfResponse Request(WcfRequest req);
第1步:创建接口
namespace WCF.Interface
//[ServiceContract(CallbackContract=typeof(ICallback))]//回调接口(全双工)
[ServiceContract]
public interface ICalculator
[OperationContract]
以订票为例简单应用wcf程序,需要的朋友可以参考下
http://www.cnblogs.com/tyb1222/archive//2222204.html
 最近看了一些REST架构风格的介绍,谈谈自己对REST的理解总结一下自己的认识。本文只最为个人阶段性的成果,供对REST开发有兴趣的童鞋参考。若有理解有误的地方恳请大侠指教。
  REST看了好多天了,自己也写了一些DEMO程序加深了对他的理解
https://msdn.microsoft.com/zh-cn/library/ms733128(v=vs.110).aspx
WCF 文档中使用的其他概念和术语包括:
消息是一个独立的数据单元,它可能由几个部分组成,包括消息正文和消
多年的.Net开发,主要从事WinForm和Asp.Net/Mvc开发,这些年也积累了一些开发的类,本来是想做一系列的文章来系统的介绍下,也算是一个总结,得总是因为这样或那样的原因而耽搁,现在.net Core 2.0都已经出来了,兴奋之余,也想将代码迁移到.netCore,但因为目前来说改动较大,所以暂时不做.NetCore的类库。今天就算一个序言吧,以后会将一系列的文章,着重讲解下快速的win
1、Winform数据访问模式定义
传统的Winform程序模块:用于传统的数据库通讯获取数据,这种方式获取数据,方便快捷,可以用于常规的业务系统的场景,用于单机版软件或者基于局域网内的业务系统软件。
WCF的Winform程序模块:采用了WCF技术的分布式开发模式,系统能够通过远程的WCF服务获取数据,而不用直接和数据库相连,提高数据的安全性和可维护性,适用于互联网、局域网环境下的业
1.新建一个MVC web项目。
2.点击项目,【右键】→【添加】→【新建项】
3.点击【Web】→【Web服务】
4.恭喜,Web Service已经新建成功,里面的方法就可以参考着根据自己的需要进行修改了,是不是很简单。
5.Web Serice建成之后当然是开始调用了。在【引用】上【右键】,添加【服务引用】
6.开始引用。
7.恭喜服务已经引用
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口。
通信双方的沟通方式,由合约来订定。
通信双方所遵循的通信方法,由协议绑定来订定。
通信期间的安全性,由双方约定的安全性层次中国科技论文在线
您当前所在位置:
登录到中国科技论文在线
账号密码登录
短信快速登录
获取验证码
404 Not Found 该页面不存在
您可能想查看的页面:什么是wcf架构?_百度知道
什么是wcf架构?
c#中怎样搭建wcf架构?...
c#中怎样搭建wcf 架构?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
匿名用户知道合伙人
Windows通信基础(Windows Communication Foundation ),简称WCF, 是基于.NET框架的一种开发技术,是一种面向服务的编程模型,用于生成面向服务的应用程序。运用WCF可以方便地建立一个服务(例如Web服务器),再建立一个控制台应用程序(例如客户端),客户端就可以向服务器提出申请,服务器将会相应请求并返回客户端所需的信息(完成服务)。 最好自己去百度
匿名用户知道合伙人
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。基于我的Winform开发框架扩展而成的WCF开发框架 - 伍华聪 - 博客园
随笔 - 565, 文章 - 20, 评论 - 7624, 引用 - 20
一直以来,多数时间在开发一些Winform共享软件,经过多年的积累,逐渐形成比较成熟稳定的Winform开发框架,并结合Web项目开发经验、代码生成工具、相关的控件开发及项目开发经验,逐渐形成一个相对比较完善的.NET开发体系。不过由于种种原因,甚少涉足WCF的相关应用,只是在09年初的时候,开发一个送水软件网络版的时候,玩过WCF,那时候主要是把WCF作为一个送水各种业务数据的同步服务实现。由于研究兴趣及工作便利等原因,最近学习研究,把WCF服务搭建在我传统的Winform开发框架基础上,完成一个分布式的WCF开发框架,本文主要介绍相关的框架实现过程及总结碰到的问题,逐步深入研究,力求把其设计为我的Winform开发框架外的一个补充,可以作为分布式应用开发框架。
首先总结一下WCF的一些特点,WCF主要是基于客户端-服务端通讯模式来实现分布式应用,并通过服务公布的节点进行访问,实现数据的交换等服务。下面是其中应用的几个示意图。
我们先来看看我的传统Winform开发框架的设计图,如下所示。其中界面层UI直接访问BLL层,不需要通过网络,其中公用辅助类库Common层、实体类层可以在各个层中访问,并把常用的权限管理、字典管理封装为组件模块,直接调用,底层则使用工厂方式,来支持各种不同的数据库,其中UI层、BLL层、DAL层、实体层均使用继承类方式实现最良好的封装、最优的代码设计。
关于我的Winform开发框架相关内容,可以参考下面几篇文章:
&另外还有未发布的基于DevExpress样式的Winform开发框架,整个多样式界面的Winform框架工程如下图所示。
由于工程管理的需求,我倾向于尽可能减少工程的项目,因此框架业务层把BLL层、DAL层、IDAL层、Entity层均融合放到一个工程项目中,通过不同的目录进行区分即可,这样既方便应用,也方便部署管理。
下面开始介绍基于以上Winform框架的WCF框架扩展,首先我们在界面层和BLL层插入一层WCF服务层,界面层UI不再业务层BLL打交道,而是代之以WCF服务层的客户端代理类打交道,而WCF服务层则是BLL层更进一步的包装,设计图如下所示。
项目工程截图如下所示
客户端调用WCF服务非常方便简单,构造一个WCF服务客户端代理类实例即可应用,如下所示,如果有多个服务,创建多个实例服务即可。
& & & &&private&ManufacturerServiceClient&client&=&new&ManufacturerServiceClient();& & & &&private&CompanyParkServiceClient&companyParkClient&=&new&CompanyParkServiceClient();&
由于WCF服务是直接对BLL层的封装,因此也需要提供BLL层基础的增删改查等操作,我们把它定义基类接口IBaseService,并实现该基类接口即可。如下代码所示。
& & [ServiceContract]&&&&public&interface&IBaseService&T&&where&T&:&BaseEntity&&&&{&&&&&&&&[OperationContract]&&&&&&&&bool&Delete(string&key);&&&&&&&&[OperationContract]&&&&&&&&bool&DeleteByCondition(string&condition);&&&&&&&&&&&&&&&&[OperationContract]&&&&&&&&List&T&&FindWithPager(string&condition,&PagerInfo&info);&&&&&&&&[OperationContract]&&&&&&&&List&T&&Find(string&condition);&&&&&&&&[OperationContract]&&&&&&&&T&FindByID(string&key);&&&&&&&&[OperationContract]&&&&&&&&List&T&&FindByIDs(string&idString);&&&&&&&&[OperationContract]&&&&&&&&T&FindFirst();&&&&&&&&[OperationContract]&&&&&&&&T&FindLast();&&&&&&&&[OperationContract]&&&&&&&&T&FindSingle(string&condition);&&&&&&&&[OperationContract]&&&&&&&&DataTable&FindToDataTable(string&condition);&&&&&&&&[OperationContract]&&&&&&&&List&T&&GetAllWithPager(PagerInfo&info);&&&&&&&&[OperationContract]&&&&&&&&List&T&&GetAll();&&&&&&&&[OperationContract]&&&&&&&&DataSet&GetAllToDataSet(PagerInfo&info);&&&&&&&&[OperationContract]&&&&&&&&DataTable&GetAllToDataTable();&&&&&&&&[OperationContract]&&&&&&&&int&GetRecordCount2(string&condition);&&&&&&&&[OperationContract]&&&&&&&&int&GetRecordCount();&&&&&&&&[OperationContract]&&&&&&&&bool&Insert(T&obj);&&&&&&&&[OperationContract]&&&&&&&&int&Insert2(T&obj);&&&&&&&&[OperationContract]&&&&&&&&bool&IsExistKey(string&fieldName,&object&key);&&&&&&&&[OperationContract]&&&&&&&&bool&IsExistRecord(string&condition);&&&&&&&&[OperationContract]&&&&&&&&bool&Update(T&obj,&string&primaryKeyValue);& & }&
&基类的实现如下所示,其中看到,基本是封装了BLL业务层的封装,和传统Winform框架界面层的调用很类似。另外该类通过泛型来识别对应的实体类,并通过实体类的类型名称来构造对应的业务层实例,这个和DAL、IDAL的继承关系很接近,因此不难理解。
&&&&&public&class&BaseService&T&&:&IBaseService&T&&where&T&:&BaseEntity,&new()&&&&{&&&&&&&&BaseBLL&T&&bll&=&null;&&&&&&&&public&BaseService()&&&&&&&&{&&&&&&&&&&&&bll&=&(BaseBLL&T&)Assembly.Load("ParkDeviceUserBiz").&&&&&&&&&&&&&&&&CreateInstance(typeof(T).FullName.Replace("Entity",&"BLL").Replace("Info",&""));&&&&&&&&}&&&&&&&&#region&对象添加、修改、查询接口&&&&&&&&///&&summary&&&&&&&&&///&插入指定对象到数据库中&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="obj"&指定的对象&/param&&&&&&&&&///&&returns&执行成功返回新增记录的自增长ID。&/returns&&&&&&&&&public&virtual&bool&Insert(T&obj)&&&&&&&&{&&&&&&&&&&&&return&bll.Insert(obj);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&插入指定对象到数据库中&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="obj"&指定的对象&/param&&&&&&&&&///&&returns&执行成功返回新增记录的自增长ID。&/returns&&&&&&&&&public&virtual&int&Insert2(T&obj)&&&&&&&&{&&&&&&&&&&&&return&bll.Insert2(obj);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&更新对象属性到数据库中&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="obj"&指定的对象&/param&&&&&&&&&///&&returns&执行成功返回&c&true&/c&,否则为&c&false&/c&。&/returns&&&&&&&&&public&virtual&bool&Update(T&obj,&string&primaryKeyValue)&&&&&&&&{&&&&&&&&&&&&return&bll.Update(obj,&primaryKeyValue);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&查询数据库,检查是否存在指定ID的对象(用于字符型主键)&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="key"&对象的ID值&/param&&&&&&&&&///&&returns&存在则返回指定的对象,否则返回Null&/returns&&&&&&&&&public&virtual&T&FindByID(string&key)&&&&&&&&{&&&&&&&&&&&&return&bll.FindByID(key);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据条件查询数据库,如果存在返回第一个对象&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="condition"&查询的条件&/param&&&&&&&&&///&&returns&指定的对象&/returns&&&&&&&&&public&virtual&T&FindSingle(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.FindSingle(condition);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&查找记录表中最旧的一条记录&&&&&&&&///&&/summary&&&&&&&&&///&&returns&&/returns&&&&&&&&&public&T&FindFirst()&&&&&&&&{&&&&&&&&&&&&return&bll.FindFirst();&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&查找记录表中最新的一条记录&&&&&&&&///&&/summary&&&&&&&&&///&&returns&&/returns&&&&&&&&&public&T&FindLast()&&&&&&&&{&&&&&&&&&&&&return&bll.FindLast();&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&获取表的所有记录数量&&&&&&&&///&&/summary&&&&&&&&&///&&returns&&/returns&&&&&&&&&public&int&GetRecordCount2(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.GetRecordCount(condition);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&获取表的所有记录数量&&&&&&&&///&&/summary&&&&&&&&&///&&returns&&/returns&&&&&&&&&public&int&GetRecordCount()&&&&&&&&{&&&&&&&&&&&&return&bll.GetRecordCount();&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据condition条件,判断是否存在记录&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="condition"&查询的条件&/param&&&&&&&&&///&&returns&如果存在返回True,否则False&/returns&&&&&&&&&public&bool&IsExistRecord(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.IsExistRecord(condition);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&查询数据库,检查是否存在指定键值的对象&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="fieldName"&指定的属性名&/param&&&&&&&&&///&&param&name="key"&指定的值&/param&&&&&&&&&///&&returns&存在则返回&c&true&/c&,否则为&c&false&/c&。&/returns&&&&&&&&&public&virtual&bool&IsExistKey(string&fieldName,&object&key)&&&&&&&&{&&&&&&&&&&&&return&bll.IsExistKey(fieldName,&key);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据指定对象的ID,从数据库中删除指定对象(用于整型主键)&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="key"&指定对象的ID&/param&&&&&&&&&///&&returns&执行成功返回&c&true&/c&,否则为&c&false&/c&。&/returns&&&&&&&&&public&virtual&bool&Delete(string&key)&&&&&&&&{&&&&&&&&&&&&return&bll.Delete(key);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据指定条件,从数据库中删除指定对象&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="condition"&删除记录的条件语句&/param&&&&&&&&&///&&returns&执行成功返回&c&true&/c&,否则为&c&false&/c&。&/returns&&&&&&&&&public&virtual&bool&DeleteByCondition(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.DeleteByCondition(condition);&&&&&&&&}&&&&&&&&#endregion&&&&&&&&#region&返回集合的接口&&&&&&&&///&&summary&&&&&&&&&///&根据ID字符串(逗号分隔)获取对象列表&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="idString"&ID字符串(逗号分隔)&/param&&&&&&&&&///&&returns&符合条件的对象列表&/returns&&&&&&&&&public&virtual&List&T&&FindByIDs(string&idString)&&&&&&&&{&&&&&&&&&&&&return&bll.FindByIDs(idString);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据条件查询数据库,并返回对象集合&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="condition"&查询的条件&/param&&&&&&&&&///&&returns&指定对象的集合&/returns&&&&&&&&&public&virtual&List&T&&Find(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.Find(condition);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&根据条件查询数据库,并返回对象集合(用于分页数据显示)&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="condition"&查询的条件&/param&&&&&&&&&///&&param&name="info"&分页实体&/param&&&&&&&&&///&&returns&指定对象的集合&/returns&&&&&&&&&public&virtual&List&T&&FindWithPager(string&condition,&PagerInfo&info)&&&&&&&&{&&&&&&&&&&&&return&bll.Find(condition,&info);&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&返回数据库所有的对象集合&&&&&&&&///&&/summary&&&&&&&&&///&&returns&指定对象的集合&/returns&&&&&&&&&public&virtual&List&T&&GetAll()&&&&&&&&{&&&&&&&&&&&&return&bll.GetAll();&&&&&&&&}&&&&&&&&///&&summary&&&&&&&&&///&返回数据库所有的对象集合(用于分页数据显示)&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="info"&分页实体信息&/param&&&&&&&&&///&&returns&指定对象的集合&/returns&&&&&&&&&public&virtual&List&T&&GetAllWithPager(PagerInfo&info)&&&&&&&&{&&&&&&&&&&&&return&bll.GetAll(info);&&&&&&&&}&&&&&&&&public&virtual&DataSet&GetAllToDataSet(PagerInfo&info)&&&&&&&&{&&&&&&&&&&&&return&bll.GetAllToDataSet(info);&&&&&&&&}&&&&&&&&public&DataTable&GetAllToDataTable()&&&&&&&&{&&&&&&&&&&&&return&bll.GetAllToDataTable();&&&&&&&&}&&&&&&&&public&DataTable&FindToDataTable(string&condition)&&&&&&&&{&&&&&&&&&&&&return&bll.FindToDataTable(condition);&&&&&&&&}&&&&&&&&#endregion&&&&}
创建服务的时候,我们在工程上创建一个WCF服务类接口,类的名称和BLL层的类名称一样,不过后面增加一个Service后缀即可,如下所示。
接下来要修改相关的实现代码,主要是继承关系,如下代码所示。
& &&public&class&ManufacturerService&:&BaseService&ManufacturerInfo&,&IManufacturerService&&&&{&&&&&&&&///&&summary&&&&&&&&&///&检查是否存在重复的单位名称(排除ID本身的)&&&&&&&&///&&/summary&&&&&&&&&///&&param&name="companyName"&单位名称&/param&&&&&&&&&///&&param&name="ID"&&/param&&&&&&&&&///&&returns&&/returns&&&&&&&&&public&bool&CheckExist(string&companyName,&string&ID)&&&&&&&&{&&&&&&&&&&&&return&BLLFactory&Manufacturer&.Instance.CheckExist(companyName,&ID);&&&&&&&&}& & }
编译服务后,在WinformUI层添加WCF服务应用即可,如下所示 。
引用、创建WCF服务客户端代理类,并调用,即可调用IBaseService里面定义的接口和扩展接口IManufacturerService里面的接口实现。WCF接口测试可以使用WCFStorm Lite 来进行接口查看及调试,如下所示。
整个项目可以在局域网或者广域网中部署,实现更大范围的分布式应用,最后呈上该项目的运行界面,供参考验证。
&以上界面层在传统的Winform框架界面中和WCF+winform框架界面中表现一致,在局域网中部署测试,客户端 + WCF服务器 + Oracle数据库服务器这种部署模式,非常流畅,由于是基于WCF框架结构,可以应用在广域网中,不过可能服务相应及Winform的体验要依赖于带宽的大小吧。
后续的文章继续就改WCF框架进行改进,并总结开发过程中遇到的问题及解决思路。&WCF开发框架形成之旅---终极WCF框架是什么样子的 - 伍华聪 - 博客园
随笔 - 565, 文章 - 20, 评论 - 7624, 引用 - 20
前面几篇WCF框架的文章,一直是介绍我的WCF框架的形成中的知识,期间虽然我在工作项目中已经成功运用各种WCF的概念及特性,而且是多个部门之间的数据管理系统,基本上WCF框架的雏形已经形成了,不过我一直想把我成熟的Winform开发框架,提炼整合到WCF框架上,这样在成熟的Winform框架基础上应用的WCF技术,才是我整个WCF开发框架的终极形式,虽然项目时间很紧,但业余空闲时间我一直未曾停步,前阵子通宵达旦完成,并经过多番测试,今天有幸和大家分享一下这个WCF框架的真面目及其中的一些经验总结。
整个终极的WCF框架和Winform一样,整合了权限控制管理、字典管理模块、公用类库、通用程序自动更新等模块,具备良好的界面布局和分布式服务应用的特点,支持数据分页、数据导入、Excel导出、支持多界面样式、支持闪屏、热键控制、多数据库支持,并且和代码生成工具Database2Sharp紧密结合等等特点,不一一尽数。
前面几篇介绍了WCF相关的开发知识,如果有兴趣可以浏览下:
基于Winform框架改造而成的WCF框架分层结构如下所示,首先我们在界面UI层和业务逻辑BLL层插入一层WCF服务层,界面层UI不再业务层BLL打交道,而是代之以WCF服务层的客户端代理类打交道,而WCF服务层则是BLL层更进一步的包装,设计图如下所示。
整个WCF框架的项目工程如下所示,其中展开的是服务层,把所有项目中涉及到的业务类,公布为WCF服务层,如果系统设计数据比较敏感,可以采用证书加密传输,或者通过其他加密方式,具体可以参考我的随笔《》:
上图把数据合约类(或者实体类)放到一个独立的层,这个是无奈之举,因为我的业务类之间有一些公用的实体类信息需要传输,如果把他整合到服务层,那么就会发生命名冲突的问题,这样把数据合约类(或者实体类)独立成工程项目作为引用,就能够解决该问题。
本WCF框架中的WHC.WareHouseMis层是业务逻辑层,包含业务逻辑、数据访问层在内的整个模块,其中支持SQLServer数据库、Access数据库两种数据库访问,由于构造通过工厂方式,因此通过配置参数即可实现切换,当然扩展下即可实现更多的数据库接入。
另外本WCF框架提供两种常见的界面框架,一种是传统的界面框架(采用Weifenluo布局空间),一种采用DevExpress界面组件形成,均具有一定的代表性,WCF框架的界面层,虽然其获取数据的方式不同,但和Winform框架具备相同的功能,如数据分页,数据导入、数据导出、权限控制、字典管理等等。
下面的图示界面层工程项目展开的截图,我们可以看到,在Winform框架中独立的通用权限管理模块、通用字典管理模块,在这里做了一个整合,不再是独立应用的程序集模块,所谓合久必分,分久必合,就是这样的道理。其中红色部分就是字典和权限管理的控制界面模块,这里把它作为界面的一部分,方便服务层的统一部署,统一使用或者统一修改配置等。 另外绿色部分是界面层的基类,这个和Winform框架是一样的,都是为了达到统一、合理封装的目的。
我们来看看两种不同的界面效果,如下所示:
1)传统的界面布局效果如下所示。
2)基于漂亮的界面控件DevExpress的界面效果如下所示
3)由于WCF框架整合了字典模块和权限模块的界面,因此同时更新了界面效果,其中DevExpress界面效果的字典模块如下所示
4)其中DevExpess界面效果的权限控制模块如下所示&
另外包含的WCF框架模块自动更新模块,由于采用了图片的背景界面效果。Winform开发框架和WCF开发框架的效果一样,而且都是采用独立的自动更新模块,通过配置更新地址和配置文件即可实现,不再赘述。
本文主要介绍WCF开发框架的总体内容,不设计代码,这可能给一切代码至上的朋友有些失望,不过却可以作为给大家进行分布式部署应用的一个思路及参考,如果您有好的建议或者问题,希望大家一起沟通,共同进步。&}

我要回帖

更多关于 架构和框架的区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信