com+的高手请过来,讨论一下,如何设计高效的com+系统(100分)

  • 主题发起人 主题发起人 fonder
  • 开始时间 开始时间
to fonder
你是否用协调对象?你在客户端直接用DcomConnect来进行联接吗?你的data module
对象是个什么概念,一个data module对象包含的是一个表还是一个业务对象。
 
我公司招兼职,远程开发,有兴趣请联系:Manpower@vvv888.com
 
好啊,我有点兴趣 liujunzhang163@163.net
 
要提高效率需要考虑以下问题:
1:按功能需要划分事务。
2:尽量提高资源的利用率。
3:并及时释放不需要的资源。
4:选用适合的连接方式以提高连接速度。
5:尽量减少不必要的消息和数据传送。
Com+在资源的利用管理方面已经很完善,我们需要的只是设计一个能发挥Com+效能的结构。
我认为在服务器上的Com+组件应该分为三部分:
  首先是一个管理调度其他业务对象的Com+组件,所有客户端都连接该组件,通过该组件来
使用业务对应提供的功能(由于业务对象在本机上,所以使用直接接口引用速度是很快的),这样可以提高对客户端连接的响应速度,也方便了以后改变客户
端对Com+连接方式的改变。
  然后各个是实现业务逻辑的业务对象,可以根据业务对事务的需求来分配。尽量减少
事务对资源的占有。
  最后是一个连接数据库进行操作的Com+对象,该对象提供一些执行SQL和存储过程功能的较
通用的数据库操作的方法接口。这样便可以充分利用到Com+的资源Pooling机制,进行快速
数据库访问。
 
COM+是不是必须封装到ActiveX DLL里面呢,能不能像远程数据模块一样封装到一个程序中
 
to tata1:
在com+的环境里, 你是用那种方式建立com+对象的,看李维的书上说,在com+的执行环
境里,用dcomconnection建立com+对象要改写delphi里的几个文件的内容,你们是怎样处理的。
是不是也象李维所说的那样,改写delphi里的几个文件的内容。
 
我一般很少用COM+的远程数据模块,我一般将结果数据集转换为XML传给客户端,客户端也是通过XML传给
服务端的,所以客户端的使用是CreateOLEObject。这样服务端一般取得数据后,处理完毕后将结果返回
客户端,然后立即释放所有资源。
COM+本身提供的事务我不理解怎么工作的,数据库操作我自己显式的使用数据库事务处理。
不过我最近遇到一些问题:
在多线程下使用Com+对象进行工作会发生冲突,同一个接口不能被不同线程使用。但是当我为每个线程
创建一个连接时(CreateOleObject),偶尔也会出冲突问题。后来我就放弃了,直接用ADO存取!
不知道各位再多线程下有没有使用过?
 

在com+的环境里, 你是用那种方式建立com+对象的,看李维的书上说,在com+的执行环
境里,用dcomconnection建立com+对象要改写delphi里的几个文件的内容,你们是怎样处理的。
是不是也象李维所说的那样,改写delphi里的几个文件的内容。
 
高效com+首先就是需要高效的code
减少从客户端向中间层调用的次数,减少通讯,减少中间层与数据库的通讯。
做到能做一次连接绝对不做1.00000001次。
献丑了~
 

在com+的环境里, 你是用那种方式建立com+对象的,看李维的书上说,在com+的执行环
境里,用dcomconnection建立com+对象要改写delphi里的几个文件的内容,你们是怎样处理的。
是不是也象李维所说的那样,改写delphi里的几个文件的内容。

 
1。com+/mts 系统中不要用 dcomconnection,保持组件和客户端的无状态。
2。com+/mts 中需要事务和支持事务要分开。
3。同一个com+/mts中要建立不同的接口 进行业务逻辑的区分。
4。利用好com+/mts的安全机制 与程序的权限模块结合
 
to 无业游民:
我感到很疑惑,你的COM+服务有必要使用线程吗?
TO fonder:
其实你的想法是对的,不过有必要每个窗体两个DATAMODULE吗?你可否认为这样给系统增加了
其它的负担呢.
为什么不在中间层做两个DATAMODULE,一个去持事务另一个不支持事务,在客户端不同情况下
调用呢.以前我所在的公司也是用你这种方法,不过不可取.
TO liujunzhang:
不管你是使用COM+还是BPL,无状态对象什么也好,你是否考虑过中间层服务器的安全性以及
数据传输的安全性呢.现在大部分人的三层架构都存在这样的BUG.希望你注意到了
 
TO 无忧鱼:
这个我肯定注意到了,所以我在客户端传送数据给应用服务器时用到了压缩包,就是把
数据进行了压缩,并且重要的数据进行了加密,你即使拦截到了,也无法看到正确的数
据的、李维的书上面不也说到了吗!
 
如果说Delphi程序员的话,那就是如何结合COM+ 与 DataSnap/
与Borland技术相结合./
 
to fonder :在建立Com+对象有三种方法,在李维的书上。其中速度最快的是直接引用Com+对象的
接口.Tlb文件,然后创建CoClass。我认为这种方式适合在中间层使用。
另外,编写高效的中间层不仅需要有良好的设计,还要相应地制定一套代码编写规范,从提取数据
,提交数据,对象创建等方面制定出保证系统高效运行的编码模式。
 
如果一个com+对象是需要事务的,当它调用一个含有事务的存储过程时它会出错,所以我
在存储过程里,不使用事务了,如果存储过程出错我就返回一个标志,让com+对象返回事
务。这是我个人的想法,不知道你们是不是这样。请发表一下.
 
上面的各位说来说去还是没离开李威说的!
 

如果一个com+对象是需要事务的,当它调用一个含有事务的存储过程时它会出错,所以我
在存储过程里,不使用事务了,如果存储过程出错我就返回一个标志,让com+对象返回事
务。这是我个人的想法,不知道你们是不是这样。请发表一下.

 
用delphi6 开发Com+,用Neutral模式,尽量用Object Pooling,
当然就是要无状态了,事务要尽量短,避免死锁,用ADO不要用BDE,dbExpress,
ADOConnection的KeepConnect设为False,达到Database Connectin Pooling,



 
多人接受答案了。
 

Similar threads

后退
顶部