我尝试使用delphi tokyo(10.2)在Linux上移植一个delphi datasnap服务器,一切似乎都还可以,但是如果我在TDSTCPServerTransport上设置OnDisconnect事件,则程序将进入无限循环。
我尝试使用最简单的快照服务器(仅通过delphi向导创建服务器),结果是相同的。 这是dfm代码
object ServerContainer1: TServerContainer1
OldCreateOrder = False
Height = 271
Width = 415
object DSServer1: TDSServer
Left = 96
Top = 11
end
object DSTCPServerTransport1: TDSTCPServerTransport
Port = 13000
Server = DSServer1
Filters = <>
OnDisconnect = DSTCPServerTransport1Disconnect
Left = 96
Top = 73
end
object DSServerClass1: TDSServerClass
OnGetClass = DSServerClass1GetClass
Server = DSServer1
Left = 200
Top = 11
end
end
事件代码
procedure TServerContainer1.DSTCPServerTransport1Disconnect(
Event: TDSTCPDisconnectEventObject);
begin
writeln('XXXX');
end;
ServerMethods的.dfm(作为向导创建)
object ServerMethods1: TServerMethods1
OldCreateOrder = False
Height = 150
Width = 215
end
和.pas
unit ServerMethodsUnit1;
interface
uses System.SysUtils, System.Classes, System.Json,
Datasnap.DSServer, Datasnap.DSAuth;
type
{$METHODINFO ON}
TServerMethods1 = class(TDataModule)
private
{ Private declarations }
public
{ Public declarations }
function EchoString(Value: string): string;
function ReverseString(Value: string): string;
end;
{$METHODINFO OFF}
implementation
{%CLASSGROUP 'System.Classes.TPersistent'}
{$R *.dfm}
uses System.StrUtils;
function TServerMethods1.EchoString(Value: string): string;
begin
Result := Value;
end;
function TServerMethods1.ReverseString(Value: string): string;
begin
Result := System.StrUtils.ReverseString(Value);
end;
end.
当客户端断开连接时,将触发该事件。最后,我继续调试器,然后看到杂乱无章的代码再次调用事件,程序进入循环。 有人可以帮助我吗?
在Windows上一切正常。 预先感谢。