GARANTIR DESCONTO

Fórum Mudar a Porta do DataSnap em execução #598063

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

Gostei + 1

Mais Posts

19/10/2018

Emerson Nascimento

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

Gostei + 0

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

Gostei + 0

19/10/2018

Claudio Silva

Muito obrigado, funcionou certinho.

Responder

Gostei + 0

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

Aceitar