张
张鸿林
Unregistered / Unconfirmed
GUEST, unregistred user!
原来我都习惯使用 DCom(co_<server>.createremote)创建Com+对象
为了在internet使用com+服务,又不想做WebService封装Com+
TSochetConnection除了存在不能穿透防火墙的问题,还有其他bug,
所以改用TWebConnection通讯,发现一个非常奇怪的现象:
TForm1.ButtonConnClick(Sender: TObject);
begin
WebConnection1.connected:=true;
WebConnection1.AppServer.SomeMethod;
WebConnection1.connected:=false;
//这里无法释放服务对象
end;
如果注释上述最后一行
TForm1.ButtonDisconnClick(Sender: TObject);
begin
WebConnection1.connected:=false;
end;
则,执行ButtonDisconnClick可以释放服务对象
通过组件服务管理器,可以看到,每执行一次方法,对象就多创建一个,可以肯定,不用多
久,服务器就会瘫痪。这种现象,对于使用Out-of-process server (*.exe)的服务也同样
存在。
大富翁有人提出类似问题,说:dllhost消耗内存无限增大,没有人给以合理回答,事实上是
同样原因。
http://www.distribucon.com/midasbug/results.asp?DelphiVersion=11
解决了这个问题(重载TWebConnection.SetConnect方法)
WebConncetion的另外一个问题,还没找到答案:
使用ClientDataSet.Delta提交更新,在Com+服务接受到Delta时,它的格式已经被转换为不可识别的OleVariant
我目前使用Xml格式互换解决这个问题。
为了在internet使用com+服务,又不想做WebService封装Com+
TSochetConnection除了存在不能穿透防火墙的问题,还有其他bug,
所以改用TWebConnection通讯,发现一个非常奇怪的现象:
TForm1.ButtonConnClick(Sender: TObject);
begin
WebConnection1.connected:=true;
WebConnection1.AppServer.SomeMethod;
WebConnection1.connected:=false;
//这里无法释放服务对象
end;
如果注释上述最后一行
TForm1.ButtonDisconnClick(Sender: TObject);
begin
WebConnection1.connected:=false;
end;
则,执行ButtonDisconnClick可以释放服务对象
通过组件服务管理器,可以看到,每执行一次方法,对象就多创建一个,可以肯定,不用多
久,服务器就会瘫痪。这种现象,对于使用Out-of-process server (*.exe)的服务也同样
存在。
大富翁有人提出类似问题,说:dllhost消耗内存无限增大,没有人给以合理回答,事实上是
同样原因。
http://www.distribucon.com/midasbug/results.asp?DelphiVersion=11
解决了这个问题(重载TWebConnection.SetConnect方法)
WebConncetion的另外一个问题,还没找到答案:
使用ClientDataSet.Delta提交更新,在Com+服务接受到Delta时,它的格式已经被转换为不可识别的OleVariant
我目前使用Xml格式互换解决这个问题。