SoapDataModule模块是什么线程的? ( 积分: 50 )

  • 主题发起人 主题发起人 悟空1
  • 开始时间 开始时间

悟空1

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立一个SoapDataModule做webservice,不会用com也没有业务需求用,
所以只想用WebModule+SoapDataModule做个基于http的数据库系统
不知道他们2个是基于哪种线程,能支持多少用户?中间是clientdataset+
datasetprovider后台是ado+sql2000
谢谢
 
我建立一个SoapDataModule做webservice,不会用com也没有业务需求用,
所以只想用WebModule+SoapDataModule做个基于http的数据库系统
不知道他们2个是基于哪种线程,能支持多少用户?中间是clientdataset+
datasetprovider后台是ado+sql2000
谢谢
 
实际上, ISAPI 应用是在第一个请求到达 Web 服务器时就被启动(此时创建 WebModule ),此操作在 ISAPI 的入口: DllEntryPoint 函数中实现。请求处理结束后, ISAPI 应用仍存在于内存中,包括 WebModule 也是。 Web 服务器为每个请求创建一个 Worker Thread 来处理,处理完成只是终止 Worker Thread 。即在处理请求时是在 Worker Thread 中,并不与 WebModule 在一起,特别是 IIS 可以用 dllhost.exe 来调用 ISAPI ,使它在独立的进程空间中运行(这种情况下不执行 DllEntryPoint),所以在处理请求时无法访问 WebModule 及同时创建的 DataModule (如果有的话),如果在处理请求时用到它们就将出现 AV 错误。所以在 ISAPI 中,不能使用全局的 DataModule ,只能动态创建。
解决 DataModule 的问题还有一个办法,那就是用 SOAP Server Data Module 来代替 DataModule 。为什么这样是可以的?因为 SoapDataModule 其实只是一个从 IAppServerSOAP 派生的接口,在每个请求处理时会自动创建相应的实例,可以省去手工动态创建 DataModule 的麻烦。但它也有一个问题,那就是在 WSDL 中多了很多不必要的接口: IAppServer/IAppServerSOAP 等,同时,如果在其中放了 DataSetProvider 的时候,会把不必要导出的表导出了。特别是用了 dbExpress 的情况,此时尽可能用 SQLClientDataSet 来代替 SQLDataSet + DataSetProvider + ClientDataSet 组合。
 
接受答案了.
 
后退
顶部