我现做了几个程序:
   首先开发了一个Web service形式的程序(.dll),供外部调用;然后再开发了一个COM+对象。
   此COM+(.dll)对象通过ADO连接Oracle(9i)以操纵各类数据。大致操作流程如下:
   Oracle <-> COM+对象 <-> Web service程序 <-> 外部的客户端
   Web service程序很简单,仅仅访问COM+对象提供的一个函数以获取XML形式的数据,而COM+对象也是声明一个对象并使用后即Free。
   
   现在的问题:当并发访问数<=15时系统还能正常运行,可是当并发访问数超过 15 时(或更多)系统就崩溃了。
   有时提示调用MSORA.dll出错,而有时却提示内存操作错误...
   
   恳求大家帮帮忙。

解决方案 »

  1.   

    1.你的COM+中是否用到MIDAS的组件了,据说MIDAS只能支持15个客户端并发访问!
    2. 你的COM+在创建时是选择了哪种线程模式, 如果是多线程的那种,那你要注意线程间的同步问题(很麻烦). 建议用APartment线程模式!
      

  2.   

    APartment线程模式也有问题。
    它是以DELPHI远程数据模块或事务数据模块为基础的。一个APartment线程transaction data module同时只支持一个客户访问,要允许多用户同时访问,只能多做DAta module
    建议用业务来细分。
      

  3.   

    谢谢大家的回复!
    1. 我的COM+中未用到MIDAS(即DataSnap)组件,线程模式用的是 APartment 线程模式;
    2. 请问如果多做 Data module (并用业务来细分时),是要使用 transaction data module还是普通的数据模块?我目前并没有使用任何数据模块,只是用了相关的ADO组件;
    3. 在COM+对象中,我已经启用了线程支持,同步的选项选择了“支持”,事务处理也选择了“支持”,超时设置成: 6000(ms),可是效果也不太理想。恳请大家再具体的帮帮忙。谢谢!!!
      

  4.   

    shengyong(盛勇): 我是这样理解的:
    Data module 只是各种数据库访问组件的容器,便于你的管理和使用。  transaction data module就不样了,  你看它的代码就可以发现其实它是一个基于组件的DLL(我理解就是个COM+组件)。Data module 肯定谈不上线程模式,事务等东西。而transaction data module有了COM+对象所具有的所有特性。尤其在三层开发方面那提供了更多的接口,以及方便程序员增加接口,方法. 建议做三层时,不要直接建立COM+对象,而是用Delphi自带的,(Remote)transaction data module. 只是个人意见,请大家指正!