近日实做一多层系统,有如下问题不明,特向诸位求教
问题1:李维书中讲到,ClientDataSet的Locate及SaveToFile方法都会从
AppServer下载全部数据到本地,但经我实验,D7中的ClientDataSet执行这两
个方法时并不会从AppServer下载全部数据。从D5到D7,已经过了一些年头,
我相信大多数程序员对于多层开发的概念大多都来自李维的三本书,到现在
midas技术已发生了一引起变化,大家在开发的过程中发现有哪些差异,望能
在此公布于众,减少我等新手的障碍。100分
问题2:我用SocketConnection做连接,但到客户机执行的时候出现如下错误,
有些不明白,请大家帮忙:Windows socket error:协议家族尚未配置到系统
中或没有它的存在迹象(10049)on api connect。在我本机已经运行通过,服
务端是我做开发的机器,scktsrvr已经运行。100分
问题3:李维书中讲到,当将ClientDataSet设为不等于-1的值时,将
FetchOnDemand设为False,远程服务器即为无状态的,为了能使GetNextPacket
取到正确的数据,他还写了一大段的代码。我发现,在D7中如果按以上设置,
直接调用GetNextPacket即可取得正确的数据,多个客户端同时运行的时候也
不会出错数据相互干扰的现象。那么我们所建的是否是一个无状态的服务器,
如果是,那还有必要写那么多的代码吗?如果不是,那么Remote Datamodule
是不是不能作为无状态服务器?如果服务端是用Transaction Datamodule的
话,按以上设置,则直接调用GetNextPacket并不能获得我们希望的数据,每
次都只能取最前面的几条记录,我相信这种现象表明服务器是真正无状态的,
这是否也反证了Remote Datamodule根本就是一个有状态的服务端。100分
问题4:com+的正确配置一直是我没有解决的问题,请问哪位有成功配置的经
验,望能告知,不胜感激。问题给分200分,不够可再加,但求解决
问题1:李维书中讲到,ClientDataSet的Locate及SaveToFile方法都会从
AppServer下载全部数据到本地,但经我实验,D7中的ClientDataSet执行这两
个方法时并不会从AppServer下载全部数据。从D5到D7,已经过了一些年头,
我相信大多数程序员对于多层开发的概念大多都来自李维的三本书,到现在
midas技术已发生了一引起变化,大家在开发的过程中发现有哪些差异,望能
在此公布于众,减少我等新手的障碍。100分
问题2:我用SocketConnection做连接,但到客户机执行的时候出现如下错误,
有些不明白,请大家帮忙:Windows socket error:协议家族尚未配置到系统
中或没有它的存在迹象(10049)on api connect。在我本机已经运行通过,服
务端是我做开发的机器,scktsrvr已经运行。100分
问题3:李维书中讲到,当将ClientDataSet设为不等于-1的值时,将
FetchOnDemand设为False,远程服务器即为无状态的,为了能使GetNextPacket
取到正确的数据,他还写了一大段的代码。我发现,在D7中如果按以上设置,
直接调用GetNextPacket即可取得正确的数据,多个客户端同时运行的时候也
不会出错数据相互干扰的现象。那么我们所建的是否是一个无状态的服务器,
如果是,那还有必要写那么多的代码吗?如果不是,那么Remote Datamodule
是不是不能作为无状态服务器?如果服务端是用Transaction Datamodule的
话,按以上设置,则直接调用GetNextPacket并不能获得我们希望的数据,每
次都只能取最前面的几条记录,我相信这种现象表明服务器是真正无状态的,
这是否也反证了Remote Datamodule根本就是一个有状态的服务端。100分
问题4:com+的正确配置一直是我没有解决的问题,请问哪位有成功配置的经
验,望能告知,不胜感激。问题给分200分,不够可再加,但求解决
其它问题征求答案中
李为的书上那样说过吗?好象有点印象,等我回去查一下!
不过我认为,只要clientdataset的packetrecords不是-1 那么你的服务器端就一定是有状态的。在midas环境下由于你没有释放过远程数据模块,所以状态总是存在。
而对于translation datamodule 由于在com+环境下运行,而你可能是没有使用object pooling ,所以每次GetNextPacket后,远程对象都会释放,其连接由Stub维护,所以每次GetNextPacket都会重新active模块。也就会出现你说的情况。
不知道你说的com+的配置是指用ide Wizard开发时的配置还是发布的配置?先回答这些吧,一己只言,错了大家别见笑,因为我也是新手:)
我发现,在用SocketConnection进行连接的时候,客户端的配置比较简单,且不须在客户端安装应用服务器代理,我不知道用这个连接会不会影响Com+程序的某些功能。而用DCOMConnection进行连接我从来就配置成功过,有过成功部署经验的请指教。
你的每个客户端, 都在一个服务器 Apartment 线程中, so 1 vs 1 GetNextPacket 就没有问题. 因为它 "不需要" 无状态.
怎样才能实现 object pooling 是关键了, 关于此类的书和讨论很多, 但都没有代码, 我们需要的不只如此, 我们要实现...(Borland 有呵 demos 中 Pooler 和 SharedConn 结合可以实现)
用 msn 查找姓名 [email protected], 可能我能提供一点建议4. 关于 MTS/COM+ 技术我已不想再参与, MS 的 DCOM 我已经无法忍受, 现下在学习 CORBA 中...
thread :both
thans data model的pooled属性要为true
Type Lib的com+ page要选中object pooling
最后在com+ manager中要将组件属性激活项中启用对象共用
在com+ manager中是可以看到共用的对象不会马上释放
难道是我将resource pooling 跟object pooling 搞混了?
1:分布式下是不应该用locate的
2:你已经解决
3:你应该也明白了吧?用object pooling结合李维的技术可以解决的
4:关于配置可以看com+ manager的帮助
还不发分?
mts组件必须有标准类工厂,必须在类型库中描述,必须引出dllregisterserver()并且自注册clsid,progid,接口,类型库。
mts对象的去活:
通过调用setcomplete()或setabort()
事务已经放弃或提交
最后一个客户释放对象资源的释放可使用setcomplete(),setabort()
使用iobjectcontext接口来访问对象描述表