权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(六)Remoting扩展支持

2009-09-20 15:51 通用C#系统架构 阅读(...) 评论(...) 编辑 收藏

   深夜了小区里只有几家的灯是亮着,我继续静悄悄的写这个系列吧,由于本人水平有限,可
能会有误导大家之处请谅解、有错误、漏洞之处请大家指出,我尽快修正,此文适合初学者水
平阅读。

   近期由于手上的大型软件项目临近验收、工作压力大、非常忙碌,没精力写这个系列文章了,
今天是周末休息由于中午睡了一觉,晚上想程序想来想去又兴奋过头失眠了,洗了几个葡萄,
边吃葡萄边写写这篇介绍文章,把自己曾经折腾的经验写出来分享给那些有需要人,争取让那
些需要的人少走点儿弯路、节省一些宝贵的生命,做更需要做的事情。

  紧跟新技术屁股后面跑,的确是蛮累、蛮辛苦的事情,同时也很容易当炮灰,几年前把Remoting
技术掌握了,心里踏实了一些,没过多久又出来WCF了,这2年也关注了一些,打算再过写日子用。
做项目都喜欢用最成熟的技术走在别人后面安全一些风险低一些,向别人学习,省事儿。

  我这个人很俗,我不是为了学技术、我只是为了赚钱,客户要的是实实在在的,不是要技术。
例如客户常常最关心的是:
界面是否大气操作是方便否友善功能是否符合业流程务要求运行是否稳定运行性能是否高
只要不跟这些有直接关系的技术,一般懒得学了,因为那些技术是不影响赚钱的,重点抓整体,
局部慢慢优化就可以了,赚钱最要紧,有了钱在学习心里踏实一些、实惠一些。

  不聪明的人那就得靠用功来解决问题,好像在2004年就第一次接触了Remoting,也看了很多老外
的书,但是还是没彻底搞明白到底这个东西如何用,好在之前对Java的RMI技术有些了解,只知道这
个大概是怎么回事情,但在实际工作中没用过。对只写B\S系统的人来讲Remoting的用处不是很明显,
因为程序本来就是在服务器上运行的。

   由于前几年工作上的需要,同时开发2个大型C\S架构的项目,客户不大可能因为某个软件项目的
实施,把员工的电脑都更新了,例如这个软件需要有10个8个用户经常用,很有可能这几个电脑都很
破旧,不可能每次都给员工随着时代的进步更新固定资产,也不像我们软件开发人员一样勤换笔记本,
笔记本显示器进过一次水,经常会花屏又需要换电脑了自己掏腰包就可以了,但是单位里的事情不是
你想换就换了,公司是否有相应的预算?政策?领导是否审核通过了?你换了电脑其他几十几百个员
工有意见怎处理?

   其次那么多客户端,每个装几百兆的Oralce客户端,再运行环境再装管理软件真要崩溃,并且
客户端都自己去连接数据库,那得需要有多少Licence才可以呀?定制开发大型软件项目的客户
一般都是由实力的,用正版软件的比较多,你要是买正版的Oracle、需要有几个十个Licence,
那不真不知道要烧少钱才可以了?估计比开发定制软件的费用还要昂贵好几陪了,客户是否能买得起?
是否舍得买还是另外一回事情了。在那么破的电脑上能顺利安装.NET运行环境,已经是很不容易了,
再跑这么庞大的Oracle客户端 + 管理系统 + 数据运算等等,传统的胖客户端是绝对吃不消的。

   刚开始我们是选择用WebService,运行速度是死慢死慢的,老牛拉车,我们自己的电脑上跑
都觉得有些忍无可忍更何况发布到客户的电脑上,那绝对是会闹出国际玩笑的,本来.NET WinForm 
运行性能就不怎么地,只能想办法改进了,硬着头皮试试Remoting的性能了。
  有一次也是兴奋过度,折腾了一个通宵,查找了相关资料,在自己的电脑上进行测试,感觉运行
速度的确奇快,不知道在网络环境下运行速度如何,又在公司的服务器上发布服务器端程序,在自
己的电脑上进行远程呼叫测试,折腾了一晚上,做了相应的性能测试,结果让我很是开心,我一晚
上兴奋过度没入睡,早上接着跟大伙儿一起上班了,也没请假调休。

但是的测试结果一直没丢弃,下面表格数据就是测试结果:(编写了一个相对耗时的程序进行测试)

 

本地调用运行1

远程调用1

本地调用运行50

远程调用50

1次运行

0.360 seconds

0.390 seconds

15.262 seconds

14.721 seconds

2次运行

0.344 seconds

0.351 seconds

14.391 seconds

14.000 seconds

3次运行

0.375 seconds

0.361 seconds

14.234 seconds

14.050 seconds

平均

0.360 seconds

0.367 seconds

14.629 seconds

14.257 seconds

运行结果:Remoting 调用模式下的运行速度几乎与本地运行Local模式几乎没有多大差别,
同时在多台客户端上做并发测试,结果都正常,就这么起步万事大吉了。

   这样我们对开发架构尽心了调整、只在客户端运行显示界面、页面逻辑验证等后台程序都
在服务器上运行,尽量减轻客户端的压力原则开发系统了。

  希望你是读过我的前一篇文章:白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
若你的程序不是按SOA的思想写,很难把系统扩展成Remoting、WCF,本着一切都是调用服
务的思想去设计的程序,才有比较好的可扩展性,否则就僵死在哪里,成了乱糟糟的程序,
电子垃圾一大堆了。
   
   白话讲山寨版 Remoting:如下图解:


1:服务器端程序:跟页面是无关的,可以打开数据库,能访问数据库。
2:客户端:处理页面表示逻辑,调用服务器端的服务,是无法直接打开关闭数据库的。
本来是程序都写在一起,现在是分开了写,哪些应该是在服务器上运行,哪些应该是在客户端运行。
就像B\S系统里的,C#代码与JavaScript代码一样,一个是在服务器上运行,一个是在客户端运新。

接下来我们讲吉日嘎拉的疯狂架构之RemotingServer,请看贴图:



要架设一个 RemotingServer,首先需要有个配置文件,这里叫Config.xml 结构说明如下:
 

配置文件折腾好后,只需要一行代码就可以把 RemotingServer 折腾好了,其实是非常简单的,
代码如下:

Code


为了检查程序是否运行正常,获取了服务器当前时间,为了检查是否正确连接上了数据库服务器
还获得了数据库服务器的当前时间。
配置文件写对了,数据库联接串也设置对了,运行程序的效果会如下:


若能有上面的效果能运行出来,基本上可以表明服务器端应该是完事OK了。

那为什么要这么黑乎乎的控制台应用干什么呢?他有一个调试作用,抓个屏幕看看。


我的调试部分的代码就不会变成灰色了,看图如下:



我运行客户端后的调试效果如下:谁什么时候调用了什么方法?花费了多长时间?甚至
运行了什么SQL语句都可以调试出来?这对项目开发中的简单性能测试来说实在是太强了。



接着我们讲客户端的配置:首先需要一个配置文件,如下图:

配置文件配置好了,在程序里写一行代码:
RemotingConfiguration.Configure("Remoting.xml");
就OK了。

说得最俗一些稍微夸张一些,我的程序只需要在客户端、服务端各配个配置文件,各增加一行代码,
就符合Remoting架构了
,好的程序好的架构,优点就体现在这里,不用升级一次就死一回,我坚信
WCF的改进也会很顺利,有空时,我会把WCF的简易运行模式也详细的写篇入门的文章给大家看看。
写程玩的不是技术是思想,做项目玩的不是架构是业务,经营公司玩的不技术玩的是人
若心情好、时间充裕,下一篇写 WindowsService 的部署,如何把RemotingServer按WindowsService部署。

哥写的不是寂寞更不仅是代码,哥写的是架构哥写实都是RMB,深夜折腾了4个小时终于写好了这篇文章了。
一个轻量级快速软件开发系统架构不在于局部最优而在于整体最优、不在于技术最先进而在于最简单易懂、方便扩展

导读:
白话讲山寨SOA,少一些迷惑、多一些理解,你的程序架构SOA了吗?
疯狂.NET架构通用权限后台管理工具演示版2.0下载
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 角色权限
疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 数据集权限

淘宝店地址:
http://shop59297253.taobao.com/



C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友