Mudar a Porta do DataSnap em execução
19/10/2018
0
Tenho um Servidor DataSnap - Roda com serviço.
Quando compilo com form funciona certinho, mas quando passo para Servico da erro na procedure de configurarINI.
Segue a unit
unit uSC;
interface
uses System.SysUtils, System.Classes,vcl.SvcMgr,
Datasnap.DSTCPServerTransport,IniFiles,
Datasnap.DSServer, Datasnap.DSCommonServer,
IPPeerServer, IPPeerAPI, Datasnap.DSAuth;
type
TServerContainer1 = class(TService)
DSServer1: TDSServer;
DSTCPServerTransport1: TDSTCPServerTransport;
DSServerClass1: TDSServerClass;
procedure DSServerClass1GetClass(DSServerClass: TDSServerClass;
var PersistentClass: TPersistentClass);
procedure ServiceStart(Sender: TService; var Started: Boolean);
private
procedure CodificarINI;
{ Private declarations }
protected
function DoStop: Boolean; override;
function DoPause: Boolean; override;
function DoContinue: Boolean; override;
procedure DoInterrogate; override;
public
function GetServiceController: TServiceController; override;
end;
var
ServerContainer1: TServerContainer1;
implementation
{%CLASSGROUP ''''System.Classes.TPersistent''''}
{$R *.dfm}
uses
Winapi.Windows,
uSM;
procedure TServerContainer1.DSServerClass1GetClass(
DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
begin
PersistentClass := uSM.TSM;
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ServerContainer1.Controller(CtrlCode);
end;
function TServerContainer1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
function TServerContainer1.DoContinue: Boolean;
begin
Result := inherited;
DSServer1.Start;
end;
procedure TServerContainer1.DoInterrogate;
begin
inherited;
end;
function TServerContainer1.DoPause: Boolean;
begin
DSServer1.Stop;
Result := inherited;
end;
function TServerContainer1.DoStop: Boolean;
begin
DSServer1.Stop;
Result := inherited;
end;
procedure TServerContainer1.ServiceStart(Sender: TService; var Started: Boolean);
begin
CodificarINI;
DSServer1.Start;
end;
procedure TServerContainer1.CodificarINI;
var ArquivoINI : TInifile;
porta : String;
begin
try
ArquivoINI:= TIniFile.Create(GetCurrentDir+''''\\\\\\\\Porta.ini'''');
Porta := ArquivoINI.ReadString(''''Configuracao'''',''''Porta'''',Porta);
DSTCPServerTransport1.Port := StrToInt(Porta);
except raise Exception.Create(''''Não achei o Arquivo'''');
end;
FreeAndNil(ArquivoINI);
end;
end.
Claudio Silva
Post mais votado
19/10/2018
No lugar de GetCurrentDir, tente:
- informar o caminho completo do arquivo, ou
- utilizar ExtractFilePath(ParamStr(0))+'\\Porta.ini'
procedure TServerContainer1.CodificarINI; var ArquivoINI : TInifile; porta : String; caminho: string; begin try caminho := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))); ArquivoINI := TIniFile.Create(caminho+'\\Porta.ini'); Porta := ArquivoINI.ReadString('Configuracao','Porta',Porta); DSTCPServerTransport1.Port := StrToInt(Porta); except raise Exception.Create('Não achei o Arquivo'); end; FreeAndNil(ArquivoINI); end;
Emerson Nascimento
Mais Posts
19/10/2018
Emerson Nascimento
Você salva o projeto com a conexão ativa?
19/10/2018
Claudio Silva
CodificarINI e coloca a porta no DSTCPServerTransport1.Port compilo e mando inicializar funciona certinho.
Meu email para contato : claudio@crssoftware.com.br
Clique aqui para fazer login e interagir na Comunidade :)