ISAPI的并发访问? 100分(100分)

  • 主题发起人 主题发起人 songguolong
  • 开始时间 开始时间
S

songguolong

Unregistered / Unconfirmed
GUEST, unregistred user!
本人编了一个用ISAPI写的数据库查询程序,在本机的WEB个人服务器上测试
时,打开两个浏览器窗口,并同时调用我的ISAPI程序,后调用的窗口会发出:
EDatabaseError with Meesage 'Duplicate database name "I"'.是否
多线程访问数据库的并发访问问题,请各位不吝赐教。
顺便说明:我在WEB模块中用了Tsession元件,且AutoSessionName:=True.
 
是不是用odbc构件如odbc98/modbc等来访问并且用requestlive:=true(或类似语句),
并且数据库创建再initial中了?
 
没有用ODBC,用Delphi3+Interbase4.2+WEB个人服务器+PWinn95
 
Dpr文件Begin ... end 之间加入
IsMultiThread := TRUE. 如:

exports
GetExtensionVersion,
HttpExtensionProc,
TerminateExtension;

begin
IsMultiThread := TRUE; // <--- 此句为手工加入,支持多客户连接
Application.Initialize;
Application.CreateForm(TWebModule1, WebModule1);
Application.Run;
end.

 
同意Ridolph的方法。
 
try put a tsession, set the autoname to true, set all db components'
session property to this session, good luck
 
谢谢各位参予,Ridolph和CJ所提之方法在此之前都己用过,未见凑效,
同样和程序,不用IASPI而用CGI则无任何问题,只是反映速度相差太远了!
 
Please try to use

threadvar to define your var.
 
by1455:
对不起!我对“use threadvar to define var”不甚了解,请详细一点,并举例
说明好吗?
 
我还是怀疑TSession的问题,
因为出错信息太象了,

duplicate database name
因为多个进程没有使用不同的会话,
导致同一个会话中Database Name重复,

再检查一下??
 
还有,
'Duplicate database name "I"'
这个I是什么意思?是你指定的database name属性值吗?不明白
 
蚯蚓先生的怀疑很有道理,只是我实在查不出具体问题在哪里,现把有关程序贴上,
请专家会诊,盼复甚殷!

工程中的执行语句:
begin
IsmultiThread := true;
Application.Initialize;
Application.CreateForm(TIndusWebModel, IndusWebModel);
Application.Run;
end.

WEB模块中有关定义:
object IndusWebModel: TIndusWebModel
... ... ...
object ISession: TSession
AutoSessionName = True
KeepConnections = False
Left = 140
Top = 9
end
object TStyle: TTable
DatabaseName = 'I'
SessionName = 'ISession_1'
IndexFieldNames = 'CODE'
TableName = 'STYLE'
Left = 42
Top = 67
end
... ... ...
object IDBS: TDatabase
AliasName = 'DBindus'
DatabaseName = 'I'
KeepConnection = False
LoginPrompt = False
Params.Strings = (
'user name=SYSDBA'
'password=masterkey')
SessionName = 'ISession_1'
TransIsolation = tiDirtyRead
Left = 223
Top = 7
end
... ... ...
object Tindustry: TTable
DatabaseName = 'I'
SessionName = 'ISession_1'
IndexFieldNames = 'NAME'
TableName = 'INDUSNAME'
Left = 43
Top = 121
end
end
 
不是isession_1, 是isession.
 
isession_1 是自动生成的!
 
本人在以下两种环境下重试上述问题:
Delphi3WEB应用程序+Interbase4.2本地引挈+WEB个人服务器+PWinn95
Delphi3WEB应用程序+Interbase4.2远程引挈+IIS+PWindows nt 4.00
结果发现后一种情况未见异常,而前一种情况几乎每次都会发生问题,对此,
以上各位发表高见(不会是因为速度差异引起的吧)!
 
~~TSession.Active应设置为True~~
 
Delphi4WEB应用程序+oracle7.3.2远程引挈+IIS+PWindows nt 4.00
也会有此问题。
 
如果不放TSession... ?
 
我已经说过了:
<font color=#FF0000>
~~TSession.Active应设置为True~~
</font>
 
后退
顶部