有没有办法让WebService 中的数据模块只创建一次实例?

时间:2022-01-10 05:50:53
问题描述:
在用了WebService 的数据模块后发现,每向WebService请求一次数据(包括调用一个简单的接口)数据模块都会重新创建一次(我在构造函数中加了个计数器才发现的)。我的构造函数中每次都会连接一下数据库,所以效率低的要死!

不知道有什么办法可以让数据模块只创建一次?。

8 个解决方案

#1


另建一个DataModule,把数据库的实际操作放在DataModule里,第一个WebDataModule创建的时候保证只创建一个DataModule实例,以后再创建的WebDataModule只要引用就可以了,然后所有的和数据库有关的操作由DataModule完成,在最后一个WebDataModule销毁的时候记得要销毁DataModule。

这样做有一个问题,就是所有的请求都使用同一个数据库会话,在数据库的事务方面可能会造成冲突,而且由于是多个WebDataModule共享DataModule,所以你要保证DataModule的线程安全性。

#2


.

#3


在创建WebService的时候是有一个选项的,在Add New WebService对话中有一项是服务激活模式 Service Activation Model,选择Global就可以,它的默认值是Per Request

#4


学习

#5


不用Web数据模块使用 Interface 中是有 Global 选项,可数据模块中没有,
我现在是用数据模块进行操作的,另外我的WebService类型是ISAP

halibut(乡下人): 
你的第一种方法我还不是很了解,主要是不白明 实例放在哪里才不会被清除
以及有客户访问时会执行哪个事件函数(没有事件我不能使用实例)

还有一个问题是,Dll 的生命周期是怎样的。

#6


用WebModule做接口,DataModule做商业逻辑处理,由WebModule调用相应的DataModule的接口函数,DataModule由手工创建,第一个WebModule创建的时候才创建DataModule,最后一个WebModule销毁的时候才销毁DataModule.

#7


问题时如何管理WebModule 的指针,比如,现在新建一个WebModule, 是不是要把WebModule的指针保存在一个全局的变量中呢(不然如何知道现在有几个WebModule被建立)? 
我现在主要是没找到一个在能全局保存变量的位置。

#8


问题是这个全局的计数器放在哪里?

#1


另建一个DataModule,把数据库的实际操作放在DataModule里,第一个WebDataModule创建的时候保证只创建一个DataModule实例,以后再创建的WebDataModule只要引用就可以了,然后所有的和数据库有关的操作由DataModule完成,在最后一个WebDataModule销毁的时候记得要销毁DataModule。

这样做有一个问题,就是所有的请求都使用同一个数据库会话,在数据库的事务方面可能会造成冲突,而且由于是多个WebDataModule共享DataModule,所以你要保证DataModule的线程安全性。

#2


.

#3


在创建WebService的时候是有一个选项的,在Add New WebService对话中有一项是服务激活模式 Service Activation Model,选择Global就可以,它的默认值是Per Request

#4


学习

#5


不用Web数据模块使用 Interface 中是有 Global 选项,可数据模块中没有,
我现在是用数据模块进行操作的,另外我的WebService类型是ISAP

halibut(乡下人): 
你的第一种方法我还不是很了解,主要是不白明 实例放在哪里才不会被清除
以及有客户访问时会执行哪个事件函数(没有事件我不能使用实例)

还有一个问题是,Dll 的生命周期是怎样的。

#6


用WebModule做接口,DataModule做商业逻辑处理,由WebModule调用相应的DataModule的接口函数,DataModule由手工创建,第一个WebModule创建的时候才创建DataModule,最后一个WebModule销毁的时候才销毁DataModule.

#7


问题时如何管理WebModule 的指针,比如,现在新建一个WebModule, 是不是要把WebModule的指针保存在一个全局的变量中呢(不然如何知道现在有几个WebModule被建立)? 
我现在主要是没找到一个在能全局保存变量的位置。

#8


问题是这个全局的计数器放在哪里?