Сервер обратного вызова Delphi, использующий протокол HTTP Всегда истекает через несколько минут - PullRequest
0 голосов
/ 13 июня 2018

У меня проблема с настройкой Callback Server в Delphi Tokyo.Я настроил сервер Datasnap WebBroker, затем я использую

FDSCallBackClientManager.RegisterCallback(sCallbackID,FDSCallBack);

на своем клиенте для подключения к серверу обратного вызова, он может подключиться и я могу отправить широковещательное сообщение другому клиенту, но через несколько минут после подключения, он будет отключен, когда я попытаюсь передать сообщение, это вызовет исключение, сообщающее, что время ожидания истекло.

Я использую протокол HTTP для подключения, этого не происходит при использовании протокола TCP / IP.Код - это просто мастер для создания приложения веб-брокера, ориентированного на Apache.Вот код для 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);

Так может кто-нибудь дать мне несколько советов, чего мне не хватает?

...