Based on .Net Remoting Project Summary Report<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 

任务:将一个Windows forms的Client/Server程序改写为基于.Net Remoting的程序,由IIS承载Remote Objects。

1,Windows form的Client/Server系统架构:

包含5个主要的子系统:WinUI(用户界面部分),BusinessRules(业务逻辑部分),DataAccess(数据访问部分),ApplicaitonFrameworks(负责系统参数配置和一些通用class),ExceptionManagement(负责所有系统的异常处理及log)

2,转换为基于.Net Remoting系统的若干思路

本来准备将BusinessRules子系统部署为Remote Objects,标示为SAO(SingleCall/Singleton),但立即发现了一个问题。

因为Business Class几乎都是Fileds成员变量+Public方法组成的,也符合对象技术的基本定义:将数据和操作行为(方法)包装在一起。

如果将Remote Objects部署为SAO-SingleCall,任何对Remote Objects的Public Accessors赋值/调用都会产生新的对象实例,也就是说Remote Objects是无状态的。

如果将Remote Objects部署为SAO-Singleton,显然这样也行不通,因为共享一个Remote Object实例,Fields成员变量会混乱。

虽然可以通过将方法参数直接传入,完全不使用Fileds成员变量,这样就可以解决上述问题,但是这样存在很多问题:

(1)首先,程序修改工作量巨大,我最讨厌这种没有创造性的重复工作。

(2)在Class中不使用Fileds成员变量,我觉得这样违背了对象技术的基本定义:将数据和操作行为(方法)包装在一起。另外,也丧失了使用Fileds成员变量的好处,使程序的可读性及可维护性下降。

(3)设想方法中包括N多的参数,并且多个方法都是类似的参数列表,显然不能接受。或许有人提出可以采用参数类/Entity Class来传参数,这样会产生很多的参数类,并且也违背对象技术的基本定义。

***

这样,可以考虑将Remote Objects部署为CAO(Client-Activated Object),CAO对象基本上和正常的.Net Object一样。当在Client端发出创建实例对象的请求(通过Activator.CreateInstance() or new关键字),一个激活消息将发送到Server端,然后Client端的Proxy Object并获取一个指向Remote Object的objRef对象。

CAO对象是有状态对象(stateful object),Client端对Remote Object的属性赋值后,可以在下一次正确读取,并且CAO对象在每一次方法调用都保持状态信息。

为了减少对WinUI/BusinessRules子系统的修改,显然采用CAO对象的Direct/Transparent Creation方法,具体可以参考《MarshalByRefObjects远程对象及其调用方法》,其中也有一些drawback需要注意。

我认为采用CAO来部署Remote Objects应该是可行的,不过我具体没有测试过。如果有人测试过,希望能share这方面的体会。

***

具体项目中,因为DataAccess子系统基于SqlHelper.cs类(Microsoft Data Access Application Block v2.0),无法直接将SqlHelper.cs部署为Remote Objects,前面的posting《尝试RemotingSqlHelper的若干问题》有详细的讨论。

虽然可以将SqlHelper.cs改写为可以部署为Remote Objects对象,我也的确做了一些尝试。正是由于《尝试RemotingSqlHelper的若干问题》提及的一些局限,同时也避免对BusinessRules子系统的大量修改。

最终尝试了如下的方法,并且在实际系统中验证是可行的。

3,基于.Net Remoting 的系统架构:

具体思路是这样的:

(1)将原来的DataAccess子系统部署为Remote Server,并改为RemoteDataAccess子系统,由于SqlHelper.cs不能直接部署为Remote Object,因此在外面包装一个RemotingSqlHelper Class,将RemotingSqlHelper部署为Remote Object。

(2)增加新的DataAccess子系统,该子系统负责接受来自BusinessRules子系统的调用,因此需要伪装为SqlHelper.cs的模样,否则BusinessRules子系统需要修改的地方就多了。

(3)并且新的DataAccess子系统并不直接访问SQL Server Database,而是访问RemotingDataAccess子系统中的RemotingSqlHelper Class。

其中需要注意的问题:

(1)SqlConnection对象以connection string代替,我一直习惯使用connection string,因此这个也省事了。

(2)SqlParameter对象-我定义了一个可序列化的Class,在DataAccess端,将SqlParameter对象转为可序列化的Class。然后在RemotingSqlHelper class中还原为SqlParameter对象,并调用真正的SqlHelper class。

这样,整个转换过程就大功告成了。其中BusinessRules子系统需要修改的地方很少,几乎不用改。

不过,当有大量数据记录从Server端传递到Client端时,比较明显感觉到性能受到影响。Remote Server为IIS,Channel为HTTP(IIS不支持TCP Channel),Formatter为Binary。

在此,也感谢一些friends对上述Posts的回复/评论,对我有不少启发。

当然,如果设计一个全新的基于.Net Remoting的系统,就不要费这么多周折了。

基于.Net Remoting的项目总结报告相关推荐

  1. 项目选题报告 (基于云的胜利冲锋队)

    作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 团队作业第二次-项目选题报告 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及可视化分析平台 ...

  2. 项目选题报告(基于云的胜利冲锋队)

    作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 团队作业第二次-项目选题报告 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及可视化分析平台 ...

  3. 基于SSM的商城项目项目源码+实验报告

    基于SSM的商城项目 本项目是今年暑假小学期时完成的,耗时四天时间,在小学期结束项目答辩时,在年级里斩获冠军,在此很感谢我的团队,正是我们各个环节的配合,最终才能够获得如此好的成绩. 目录 基于SSM ...

  4. 团队作业第二次—项目选题报告(追光的人)

    所属课程 软件工程1916 作业要求 团队作业第二次-项目选题报告 团队名称 追光的人 作业目标 组员提出选题,大家挑选出可行性最高的进行分析,制作选题报告和选题PPT 目录 队员贡献分比例 选题报告 ...

  5. 2020 年微服务项目活跃度报告

    导读:2020 年 8 月 18 日,首届云原生微服务大会于线上召开,会议首日,阿里云资深技术专家.CNCF TOC 李响 Keynote 演讲中正式发布了< 2020 年微服务领域开源数字化报 ...

  6. 浙江理工大学信息学院本科生创新项目总结报告——简单的后台用户管理项目

    信息学院本科生创新项目总结报告 研究目的与意义 基于Spring Boot框架等技术实现一个简单的后台用户管理系统项目,具有良好的用户交互体验.良好的信息反馈能力.安全防护措施,包括用户登录.用户注册 ...

  7. 《快活帮》第二次作业:团队项目选题报告

    项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验六 团队作业2:团队项目选题报告 团队名称 快活帮 作业学习目标 (1)团队项目可行性 ...

  8. c语言张振国实验报告,基于VisualC的黄金分割法程序设计实验报告.doc

    基于VisualC的黄金分割法程序设计实验报告 新疆农业大学机械交通学院 实验报告 基于Visual C 的黄金分割法程序设计 一 .实验目的 1. 加深对机械优化设计方法的基本理论和算法步骤的理解: ...

  9. 互联网+废品回收项目可行性分析报告

    本项目设计书为笔者软件工程课的作业,由于时间有限较为粗糙,不合理之处还望指出并改正. 互联网+废品回收项目可行性分析报告 互联网+废品回收项目需求分析报告 互联网+废品回收项目概要设计说明书 互联网+ ...

最新文章

  1. 梯度下降法的三种形式-BGD、SGD、MBGD
  2. torch_geometric 笔记:TORCH_GEOMETRIC.UTILS(更新中)
  3. IoU 判断矩形区域重叠
  4. 远程管理,无需在机房来回穿梭
  5. 敏捷结果: 学习笔记
  6. 设计数据密集型应用程序_设计数据密集型应用程序书评
  7. 安卓虚拟机与Hyper-V冲突
  8. JVM调优总结(2):基本垃圾回收算法
  9. c语言switch scanf语句,C语言中scanf函数与switch语句
  10. 写给省选前的自己V2
  11. MongoDB的增删改查
  12. Unicode和ASCII的区别
  13. 写出一下Java方法对应的签名_Java中的方法签名是否包含其返回类型?
  14. esxi不能识别Intel 网卡怎么办
  15. 蚂蚁分类信息系统5.8 短信通道2 互亿无线配置使用说明
  16. vue valley_12个无剧透的Stardew Valley秘诀和技巧,助您入门
  17. 更改适配器设置无法和计算机连接,win10系统更改适配器没有无线网络连接的设置技巧...
  18. yaahp使用教程_如何用yaahp进行大量备选方案/评价对象的综合评价?
  19. Python最简单的图形编程
  20. Android 代码新增联系人至手机通讯录中

热门文章

  1. python 路由转发_RabbitMQ之路由键转发消息
  2. 神策数据:游戏买量与长线运营的数据宝典
  3. 深度洞见|体验经济浪潮兴起,什么才是企业制胜密钥?
  4. 周五话运营 | 和用户谈一段不分手的恋爱(留存分析)
  5. (23/24) webpack实战技巧:如何在webpack环境中使用Json
  6. WPF中用于嵌入其他进程窗口的自定义控件(AppContainer)
  7. 互联网推广方案:如何提高企业网站排名!
  8. SpringBoot中的Quartz应用
  9. jQuery remove 内存 释放
  10. 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222