我现做了几个程序:
首先开发了一个Web service形式的程序(.dll),供外部调用;然后再开发了一个COM+对象。
此COM+(.dll)对象通过ADO连接Oracle(9i)以操纵各类数据。大致操作流程如下:
Oracle <-> COM+对象 <-> Web service程序 <-> 外部的客户端
Web service程序很简单,仅仅访问COM+对象提供的一个函数以获取XML形式的数据,而COM+对象也是声明一个对象并使用后即Free。
现在的问题:当并发访问数<=15时系统还能正常运行,可是当并发访问数超过 15 时(或更多)系统就崩溃了。
有时提示调用MSORA.dll出错,而有时却提示内存操作错误...
恳求大家帮帮忙。
首先开发了一个Web service形式的程序(.dll),供外部调用;然后再开发了一个COM+对象。
此COM+(.dll)对象通过ADO连接Oracle(9i)以操纵各类数据。大致操作流程如下:
Oracle <-> COM+对象 <-> Web service程序 <-> 外部的客户端
Web service程序很简单,仅仅访问COM+对象提供的一个函数以获取XML形式的数据,而COM+对象也是声明一个对象并使用后即Free。
现在的问题:当并发访问数<=15时系统还能正常运行,可是当并发访问数超过 15 时(或更多)系统就崩溃了。
有时提示调用MSORA.dll出错,而有时却提示内存操作错误...
恳求大家帮帮忙。
2. 你的COM+在创建时是选择了哪种线程模式, 如果是多线程的那种,那你要注意线程间的同步问题(很麻烦). 建议用APartment线程模式!
它是以DELPHI远程数据模块或事务数据模块为基础的。一个APartment线程transaction data module同时只支持一个客户访问,要允许多用户同时访问,只能多做DAta module
建议用业务来细分。
1. 我的COM+中未用到MIDAS(即DataSnap)组件,线程模式用的是 APartment 线程模式;
2. 请问如果多做 Data module (并用业务来细分时),是要使用 transaction data module还是普通的数据模块?我目前并没有使用任何数据模块,只是用了相关的ADO组件;
3. 在COM+对象中,我已经启用了线程支持,同步的选项选择了“支持”,事务处理也选择了“支持”,超时设置成: 6000(ms),可是效果也不太理想。恳请大家再具体的帮帮忙。谢谢!!!
Data module 只是各种数据库访问组件的容器,便于你的管理和使用。 transaction data module就不样了, 你看它的代码就可以发现其实它是一个基于组件的DLL(我理解就是个COM+组件)。Data module 肯定谈不上线程模式,事务等东西。而transaction data module有了COM+对象所具有的所有特性。尤其在三层开发方面那提供了更多的接口,以及方便程序员增加接口,方法. 建议做三层时,不要直接建立COM+对象,而是用Delphi自带的,(Remote)transaction data module. 只是个人意见,请大家指正!