0

我在 Delphi Tokyo 中设置回调服务器时遇到问题。我已经设置了一个 Datasnap WebBroker 服务器,然后我使用

FDSCallBackClientManager.RegisterCallback(sCallbackID,FDSCallBack);

在我的客户端上连接回调服务器,它可以连接,我可以向其他客户端发送广播消息,但是在连接几分钟后,它将断开连接,当我尝试广播消息时,它会引发异常,告知通信正在暂停。

我使用 HTTP 协议进行连接,使用 TCP/IP 协议时不会发生这种情况。该代码只是创建针对 Apache 的 webbroker 应用程序的向导。这里是 SQLConnection 的代码:

FConnection.Params.Values['CommunicationIPVersion'] := 'IP_IPv4';
  FConnection.Params.Values['Hostname'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'Hostname',
      'localhost'
    );
  FConnection.Params.Values['Port'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'WebPort',
      '80'
    );
  FConnection.Params.Values['DatasnapContext'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'DatasnapContext',
      'datasnap'
    );
  FConnection.Params.Values['URLPath'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'URLPath',
      'rest'
    );
  FConnection.Params.Values['ConnectTimeout'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'ConnectTimeOut',
      '1000'
    );
  FConnection.Params.Values['CommunicationTimeout'] :=
    TCSClass_Configuration.ReadConfig(
      ClientVariables.Config.FileName,
      AProfile,
      'CommunicationTimeOut',
      '1000'
    );

这里是连接回调服务器的代码:

FDSCallBackClientManager.ChannelName := FCallbackChannelName;
FDSCallBackClientManager.DSHostname :=
  FConnection.Params.Values['Hostname'];
FDSCallBackClientManager.DSPort :=
  FConnection.Params.Values['Port'];
FDSCallBackClientManager.DSPath :=
  FConnection.Params.Values['URLPath'];
FDSCallBackClientManager.CommunicationProtocol :=
  FConnection.Params.Values['CommunicationProtocol'];
FDSCallBackClientManager.ConnectionTimeout :=
  FConnection.Params.Values['ConnectTimeout'];
FDSCallBackClientManager.CommunicationTimeout :=
  FConnection.Params.Values['CommunicationTimeout'];

sManagerID := TDSTunnelSession.GenerateSessionId;
sCallbackID := TDSTunnelSession.GenerateSessionId;

FDSCallBackClientManager.ManagerId := sManagerID;

if FDSCallBack = nil then
begin
  FDSCallBack := TCSClass_Callback.Create(
    Self,
    sManagerID,
    sCallbackID
  );
end;
FDSCallBackClientManager.RegisterCallback(sCallbackID,FDSCallBack);

那么谁能给我一些建议我错过了什么?

4

0 回答 0