Mudar a Porta do DataSnap em execução

19/10/2018

0

Bom dia Galera estou com um Problema que não consigo resolver.
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

Claudio Silva

Responder

Post mais votado

19/10/2018

Deve ter relação com a criação do arquivo. Se não me engano um serviço tem como base a pasta System do Windows, e talvez o programa não tenha permissão para gravar ali.
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

Emerson Nascimento
Responder

Mais Posts

19/10/2018

Emerson Nascimento

Qual o erro apresentado?
Você salva o projeto com a conexão ativa?
Responder

19/10/2018

Claudio Silva

Quanto vou iniciar o serviço retorna erro, não inicializa, se tiro a chamada
CodificarINI e coloca a porta no DSTCPServerTransport1.Port compilo e mando inicializar funciona certinho.

Meu email para contato : claudio@crssoftware.com.br
Responder

19/10/2018

Claudio Silva

Muito obrigado, funcionou certinho.

Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar