Linux上的Delphi Datasnap服务器挂起循环

时间:2018-12-20 23:22:14

标签: linux delphi indy datasnap

我尝试使用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上一切正常。 预先感谢。

0 个答案:

没有答案