客户端存盘,经常死机 ( 积分: 100 )

  • 主题发起人 主题发起人 新兵
  • 开始时间 开始时间

新兵

Unregistered / Unconfirmed
GUEST, unregistred user!
三层架构,oracle9i,socketconnection联机,apartment线程方式,在客户端存盘调用服务端save方法,save方法包含事务,运行时经常会死机,但应用服务器和客户端在同一台机器上时从不死机,为什么呀,是不是把表锁死了,可没有接获异常阿,怎么解决呀,拜托各位了,真急死我了
 
三层架构,oracle9i,socketconnection联机,apartment线程方式,在客户端存盘调用服务端save方法,save方法包含事务,运行时经常会死机,但应用服务器和客户端在同一台机器上时从不死机,为什么呀,是不是把表锁死了,可没有接获异常阿,怎么解决呀,拜托各位了,真急死我了
 
使用scktsrvr.exe作为服务代理吗?
看看其连结数,可能已经有很多死掉的连接了?
这种方式,如果客户很多,而又使用状态连结(客户connet以后不断开),肯定会出现
你说的问题
 
只启动了2个连接呀
 
使用无状态,看看问题是否还存在
try
socketconnection.connected:=true;
do
shometine update
finally
socketconnection.connected:=false;
end;
如果还有问题
适当地方设断点,看问题出在哪里?
 
我的源码,麻烦你帮看看
procedure TServerDM.TransSave(var FKValue, JJDValue,
CLXXValue: OleVariant;
out TransException: OleVariant);
var
FKRecord : OleVariant;
JJDRecord : OleVariant;
CLXXRecord : OleVariant;
TransResult : OleVariant;
ErrCount : integer;
aTD : TTransactionDesc;
begin
aTD.TransactionID := 11902;
aTD.IsolationLevel := xilReadCOMMITTED;
FKRecord := FKValue;
JJDRecord := JJDValue;
CLXXRecord := CLXXValue;
if not Self.SQLConnPolice.InTransaction then
begin
self.SQLConnPolice.StartTransaction(aTD);
try
if not VarIsNull(FKRecord) then
FKRecord := self.dspFKXX.ApplyUpdates(FKRecord,0,ErrCount);
if ErrCount >
0 then
SysUtils.Abort;
if not VarIsNull(JJDRecord) then
JJDRecord := Self.dspJJD.ApplyUpdates(JJDRecord,0,ErrCount);
if ErrCount >
0 then
SysUtils.Abort;
if not VarIsNull(CLXXRecord) then
CLXXRecord := dspCLXX.ApplyUpdates(CLXXRecord,0,ErrCount);
if ErrCount >
0 then
SysUtils.Abort;
TransResult := Null
except
Self.SQLConnPolice.Rollback(aTD);
end;
Self.SQLConnPolice.Commit(aTD);
end;
end;
 
我从来没有这样保存过!
不知你有没有兴趣用函数保存
 
http://www.playicq.com/dispdocnew.php?id=22781
 
忘了说明 FKRecord,JJDRecord,CLXXRecord是客户端传过来的clientdataset的delta值
 
TServerDM如果是继承自TMtsDataModule,则代码模版大概是这样:
try
do
some thing update to db
SetComplete;
except
SetAbort;
end;
另外,你没有回答我上面的问题:使用无状态,看看问题是否还存在
 
TServerDM继承自TRemoteDataModule,没有用到mts
还有怎么设成无状态呀,能不能就我的代码写详细点,先谢了
 
我说的是客户端的代码,改成下面这样:
执行完马上与服务断开,就叫无状态,这是3层编程的基本原则!
try
socketconnection.connected:=true;
do
shometine update
finally
socketconnection.connected:=false;
end;
 
客户端与服务器是常连的,因为有很多数据感知组件,断开就会报错了,有没有别的方法解决,我是照着李维的书上的例子做的.
 
我是从未碰到这样的情况.
我是用函数进行存盘的!
来自:liuxiangsoft, 时间:2005-2-21 15:09:13, ID:2993243 | 编辑
http://www.playicq.com/dispdocnew.php?id=22781
你可以下载看一下嘛
 
TO:liuxiangsoft
你说的那个地址进不去呀,能不能发个到我的邮箱:fccu@tom.com
Thanks.
 
可以试一下TMultiProcess.
delphi642000@yahoo.com.cn
 
李维的代码中看不中用,适合入门
 
后退
顶部