生活就是一个谜

Life is just an Enigma, simple and complicated.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SOA的应用和心得

Posted on 2006-06-20 09:14  都市骆驼  阅读(437)  评论(0)    收藏  举报
       经过前面的研讨之后,奖SOA框架付诸开发,由于项目时间比较近张,因此选择了在五一期间加班赶工实现了该框架,并且开发过程中调整了一些细节,毕竟设计和开发还是有一定的偏差。最终除了服务管理功能尚未实现,其他都实现了。
       在开发过程修改后,WebService服务端调整成需要发布成SOA的远程方法依旧按照WebService来开发,即用WebMethod属性标记该方法,但该WebService必须实现DataSet CallServiceMethod(DataSet)。CallServiceMethod方法用于根据参数来反射调用本WebService类的其他方法。
       使用效果:本次项目主要是OA的开发,本OA定位于企业整合平台为主方向的OA,力求该OA系统和其他系统耦合性非常低,能够将任意第三方数据进行OA的审核,另外还有门户信息发布平台、权限系统、单点登陆等,这几个系统力求独立运行,互相不依赖,但是信息却是互相共享的。比如这些网站只要登陆任何其中一个后,访问其他网站则不需再登陆;比如任其它业务站点都可以往信息发布平台发布数据;比如权限系统为其他所有业务系统提供校验服务等等。SOA很好的解决了这些问题。由于目前数据量比较小,因此性能上尚未表现出劣势。其优势前面也分析过,这些系统任何一个升级改造,只要保持发布的WebService方法能够满足业务的要求,其他系统均可轻松调整配置文件即可适应其变化。
        当然,在本次项目开发中,由于所有系统都是自己人员开发的,因此其WebService方法基本已经确定,反而显得每个调用WebService的其他业务系统都要开发相应的Client类有点累赘。
        在使用过程中,也发现另外一个问题。在AOP的实现过程中,我们使用了System.Runtiome.Remoting.Messaging.LogicalCallContext.SetData(string,object)的方法来保存上下文共享对象,并且该上下位共享对象的名字是写死的,这就导致了一定问题。如果多人访问,会不会造成别人拿到的上下文对象不是自己保存的呢?目前这方面还没有详细测试,但我想肯定会有问题的。当然这个问题需要解决还是比较容易的,可以通过由外面传递一个标记用户的参数进来,用该参数标记上下文对象即可,因此不伤大雅。