你说的是不是加一个接口方法并让客户端能调用?
那你在TPooler里对应要加一个方法,记住TPooler实际上是你的RDM对象的代理,
客户端所有的业务方法都是通过它来中转的,所以在中转的过程中你才能实际区
分调用不同的RDM或服务器上的其他接口对象。
我给你分析一下没有TPooler对象和有TPooler的系统体系:
没有TPooler时实际上是
客户端->取得服务器业务对象的接口->通过接口访问实际的服务器业务对象
在有TPooler时应该是:
客户端->取得服务器业务对象的接口->通过接口访问实际的TPooler对象->
TPooler对象根据客户端掉用的方法或参数动态决定创建或取得什么业务对象(RDM)->
->调用此业务对象的方法->把结果返回给客户端
所以在有TPooler对象做中转时,你的TPooler的方法应该是涵盖了所有服务器端可调用的
接口和方法,由于Delphi带的Pooler例子TPooler对象是实现的IPoolerRDM接口,所以你在
别的RDM(比如我的SamplePoolerDM)里的接口方法在IPoolerRDM里也要申明,并在实现代
码里去调用ISamplePoolerDM里的方法,我的建议是你独立创建一个RDM也就是专门做中转的
RemoteDataModule,在这个RDM里申明时实现多个不同的RDM接口比如
TPoolerEx = class(TRemoteDataModule, IPoolerEx,IRDM1,IRDM2,...)
在实现不同RDM接口的方法时,你用池来访问不同的RDM对象,并中转调用结果,也就是这个TPoolerEx
对象实现了所有服务器端需要被客户端掉用的方法,麻烦就在于你要手工同步方法,也就是说
比如你在IRDM1里增加了一个接口方法那在TPoolerEx里也要实现一下这个方法,毕竟你要通过它
来中转啊,我想你的本意可能有两个,一个是用池的概念来使服务器的访问效率提高,另一个是
是在客户端之用一个DComConnection或SocketConnection,我建议还是最好不要去实现IAppServer的那
几个方法,如AS_GetProviderNames之类的,虽然你在开发客户端时略微麻烦了一点,不能直接调用
ClientDataSet的ApplyUpdate方法,但你完全可以将ClientDataSet的Delta倒出,然后在TPoolerEx里
申明几个方法比如取得结果集、更新结果集。。这些方法参数是你需要处理的结果集和你需要哪个RDM对
象处理的标识,这样也是可以的。我们目前的系统就是在客户端用ClientDataSet,服务器用Java编写,
中间通过Soap方法调用传递需要处理的结果集(XML格式),对于大型复杂系统一样可以,但如果你要方便
要使用Delphi提供的IAppserver的自动更新、读取功能那你就要去实现IAppServer的 AS_...这几个方法,
这样你在客户端的调用就能与服务器连动。